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

Lui*_*ira 1 javascript node.js

根据MDN的这份文件,Object.prototype.__defineGetter__()不应该使用:

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

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

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

它显然适用于客户端.所以,我想知道它是否也被弃用于服务器端使用,以及什么是最好的替代选择.

T.J*_*der 8

__defineGetter__在ECMAScript5(2009)中Object.defineProperty,在对象初始化器中使用getter/setter文字语法,在ECMAScript 2015("ES6")中通过类中的get/set声明废弃了这些从未标准化的内容.下面的例子,我也在其中包含了setter,但当然你会把它们留给只读属性.

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

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

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

    class Example {
        get name() {
            return "the value";
        }
        set name(value) {
            // Do something with value
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

前两个在V8和NodeJS 中都支持很长时间.最近版本的NodeJS(v4.0 +)在严格模式下支持类语法.

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