根据MDN的this document,不应使用Object.prototype.__defineGetter__()
:
非标准 此功能是非标准功能,不符合标准。不要在面向Web的生产站点上使用它:它不适用于每个用户。实现之间可能存在很大的不兼容性,并且行为可能在将来发生变化。
已过时 此功能已从Web标准中删除。虽然有些浏览器可能仍然支持它,但它正在被删除。不要在旧项目或新项目中使用它。使用它的页面或Web应用程序可能随时中断。
另一方面,此通知仅提到面向Web的产品站点,实现之间的不兼容性以及浏览器支持。
它明确适用于客户端。所以,我想知道它是否也被弃用于服务器端使用,以及什么是最佳替代选项。
答案 0 :(得分:8)
__defineGetter__
等等,从来都不是标准的,在ECMAScript5(2009)中被Object.defineProperty
,对象初始化器中的getter / setter文字语法,以及ECMAScript 2015(“ES6”)中的get取消/在类中设置声明。下面的例子中,我也在其中包含了setter,但当然你会将它们留给只读属性。
Object.defineProperty
(ES5 +,2009):
Object.defineProperty(obj, "name", {
get: function() {
return "the value";
},
set: function(value) {
// Do something with value
}
});
对象初始值设定项中的Getter / setter文字语法(ES5 +,2009):
var obj = {
get name() {
return "the value";
},
set name(value) {
// Do something with value
}
};
类中的Getter / setter语法(ES2015,又名“ES6”):
class Example {
get name() {
return "the value";
}
set name(value) {
// Do something with value
}
}
前两个在V8和NodeJS中都支持长。最近版本的NodeJS(v4.0 +)在严格模式下支持类语法。
新代码应该使用这些而不是旧的永不标准语法。