在Object.create中使用属性描述符的正确方法是什么?

时间:2016-06-07 07:09:48

标签: javascript prototype

我将一个对象作为Object.create方法中的第二个参数传递,但是我收到以下错误:

  

未捕获的TypeError:属性描述必须是对象:1

这是错误的代码:

var test = Object.create(null, {
    ex1: 1,
    ex2: 2,
    meth: function () {
        return 10;
    },
    meth1: function () {
        return this.meth();
    }
});

2 个答案:

答案 0 :(得分:12)

Object.create(proto, props)有两个论点:

  
      
  1. proto - 应该是新创建对象原型的对象。
  2.   
  3. props(可选) - 一个对象,其属性指定要添加到新创建的对象的属性描述符,以及相应的属性名称。
  4.   

props对象的格式定义为here

简而言之,每个属性描述符的可用选项如下:

{
    configurable: false, // or true
    enumerable: false, // or true
    value: undefined, // or any other value
    writable: false, // or true
    get: function () { /* return some value here */ },
    set: function (newValue) { /* set the new value of the property */ }
}

您的代码存在的问题是您定义的属性描述符不是对象。

以下是正确使用属性描述符的示例:

var test = Object.create(null, {
    ex1: {
        value: 1,
        writable: true
    },
    ex2: {
        value: 2,
        writable: true
    },
    meth: {
        get: function () {
            return 'high';
        }
    },
    meth1: {
        get: function () {
            return this.meth;
        }
    }
});

答案 1 :(得分:-4)

您是否尝试过这种语法:



    var test = {
      ex1: 1,
      ex2: 2,
      meth: function() {
        return 10;
      },
      meth1: function() {
        return this.meth()
      }
    };

    console.log("test.ex1 :"+test.ex1);
    console.log("test.meth() :"+test.meth());
    console.log("test.meth1() :" + test.meth1() );