我想让一个属性要么可调用,要么不可调用。例如:
function Test () {
var obj = { someString: 'here is text' };
Object.defineProperty(obj, 'string', {
get: function() {
return obj.someString;
},
set: function() {
return function(val) {
obj.someString = val;
}
}
});
return obj;
}
var test = new Test();
这样我就可以这样做:
test.string // initially returns 'here is text'
test.string('new text here') // sets obj.someString to 'new text here'
test.string // returns 'next text here'
上面的代码目前并没有按照我想要的方式运行。无论如何,在 JavaScript 中可以做这样的事情吗?要么使用Object.defineProperty
or not
我不确定是否可以这样做。相反,您可以对是否设置了函数参数以及是否没有函数读取属性执行条件操作:
function Test () {
var obj = {
someString: 'here is text',
string: function(val) {
if(val == undefined) { // If the val parameter was not defined
return this.someString; // Just return the property someString
} else { // Otherwise,
this.someString = val;
}
}
};
return obj;
}
var Tmp = new Test();
console.log(Tmp.string()); // This outputs 'here is text'
Tmp.string('New text!'); // This sets someString to 'New Text!'
console.log(Tmp.string()); // This outputs 'New Text!'
这与您想要的之间的主要区别在于,您不是调用 Tmp.string 来检索值,而是调用 Tmp.string()。
这是我的jsfiddle https://jsfiddle.net/3xpoon9c/1/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)