【问题标题】:Does Javascript 'Object.defineProperty' only accept prototype object as parameterJavascript 'Object.defineProperty' 是否只接受原型对象作为参数
【发布时间】:2016-08-12 05:23:31
【问题描述】:

从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:属性描述必须是对象:未定义。 为什么会发生此错误,关于如何使用 Object.defineProperty 的任何迹象或任何实际限制?

【问题讨论】:

标签: javascript object properties prototype


【解决方案1】:

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);

【讨论】:

    猜你喜欢
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    • 2014-01-13
    • 1970-01-01
    • 2020-06-24
    • 2020-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多