在node.js中是否已弃用__defineGetter__?

时间:2015-10-01 11:15:22

标签: javascript node.js

根据MDN的this document,不应使用Object.prototype.__defineGetter__()

  

非标准   此功能是非标准功能,不符合标准。不要在面向Web的生产站点上使用它:它不适用于每个用户。实现之间可能存在很大的不兼容性,并且行为可能在将来发生变化。

     

已过时   此功能已从Web标准中删除。虽然有些浏览器可能仍然支持它,但它正在被删除。不要在旧项目或新项目中使用它。使用它的页面或Web应用程序可能随时中断。

另一方面,此通知仅提到面向Web的产品站点,实现之间的不兼容性以及浏览器支持。

它明确适用于客户端。所以,我想知道它是否也被弃用于服务器端使用,以及什么是最佳替代选项。

1 个答案:

答案 0 :(得分:8)

__defineGetter__等等,从来都不是标准的,在ECMAScript5(2009)中被Object.defineProperty,对象初始化器中的getter / setter文字语法,以及ECMAScript 2015(“ES6”)中的get取消/在类中设置声明。下面的例子中,我也在其中包含了setter,但当然你会将它们留给只读属性。

  1. Object.defineProperty(ES5 +,2009):

    Object.defineProperty(obj, "name", {
        get: function() {
            return "the value";
        },
        set: function(value) {
            // Do something with value
        }
    });
    
  2. 对象初始值设定项中的Getter / setter文字语法(ES5 +,2009):

    var obj = {
        get name() {
            return "the value";
        },
        set name(value) {
            // Do something with value
        }
    };
    
  3. 类中的Getter / setter语法(ES2015,又名“ES6”):

    class Example {
        get name() {
            return "the value";
        }
        set name(value) {
            // Do something with value
        }
    }
    
  4. 前两个在V8和NodeJS中都支持。最近版本的NodeJS(v4.0 +)在严格模式下支持类语法。

    新代码应该使用这些而不是旧的永不标准语法。