Javascript'Object.defineProperty'是否仅接受原型对象作为参数

时间:2016-08-12 05:23:31

标签: javascript object properties prototype

从ObjectConstructor.defineProperty我看到这个函数的第一个参数是(o:any),它表示任何对象。

所以我尝试为构造函数和实例定义一个属性,如下所示:

function h(){this.a='abc';}
h()
console.log(exports.a);
Object.defineProperty(h,'b');//TypeError
var hinst=new h();
Object.defineProperty(hinst,'b');//TypeError
Object.def

实际上,两个Object.defineProperty语句都会抛出运行时异常,说

  

TypeError:属性描述必须是对象:undefined。   为什么会发生此错误,任何指示或任何关于如何使用Object.defineProperty的因素限制?

1 个答案:

答案 0 :(得分:2)

  

Object.defineProperty()方法直接定义一个新属性   对象,或修改对象上的现有属性,然后返回   物体。 More info here

正确的语法是:

Object.defineProperty(obj, prop, descriptor)

您的脚本会错过代码中的descriptor示例:

Object.defineProperty(h,'b');

下面是如何使用的示例:

function h() {
  this.a = 'abc';
}
Object.defineProperty(h, 'b',{
  value: 37,
  writable: true,
  enumerable: true,
  configurable: true
});
var hinst = new h();
Object.defineProperty(hinst, 'b',{
  value: 37,
  writable: true,
  enumerable: true,
  configurable: true
});
console.log(hinst);