我知道__defineGetter__
(and __defineSetter__
)方法名称确实是奇怪且已弃用 http://whereswalden.com/2010/04/16/more-spidermonkey-changes-ancient-esoteric-very-rarely-used-syntax-for-creating-getters-and-setters-is-being-removed/但我发现它比Object.defineProperty
。比较一下自己:
//Readable
Something.prototype.__defineGetter__("name", function() {return this._name;});
//Uh... - what?
Object.defineProperty(Something.prototype, "name", {
get: function() {return this._name;}
});
因为,正如我所说,这种方法已被弃用。所以我正在创建一个polyfill以使其重新投入使用:
if(!Object.prototype.__defineGetter__) {
Object.prototype.__defineGetter__ = function(name, func) {
Object.defineProperty(this, name, {
get: func
});
}
}
它真的只是调用标准Object.defineProperty
。我可以命名__defineGetter__
无论我想要什么。我只是决定坚持已经存在的东西。
这里的问题是,如果我使用__defineGetter__
and __defineSetter__
我正在调用同一属性上的polyfillsObject.defineProperty
twice.
我的问题是: 可以打电话吗Object.defineProperty
同一房产两次?例如,它不会覆盖某些东西吗?