我不明白,为什么不能将其作为方法访问?
var foo = {};
Object.defineProperty(foo, 'bar', {
enumerable: false,
value: function () {console.log('foo.bar\'d!');}
});
foo.bar(); // foo.bar'd!
如果您想在原型上使用它,那么简单
Object.defineProperty(foo.prototype, /* etc */);
甚至直接在Object.create https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create
foo.prototype = Object.create(null, {
'bar': {value: function () {/* ... */}}
});
但是,除非您要创建foo
, it won't如果你尝试出现foo.bar
,并且仅可见foo.prototype.bar
.
If foo
有自己的原型(例如foo = Object.create({})
),你可以得到它Object.getPrototypeOf https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getPrototypeOf,将属性添加到其中,然后foo.bar
即使它不是一个实例也会起作用。
var proto = Object.getPrototypeOf(foo); // get prototype
Object.defineProperty(proto, /* etc */);
你可以看到可枚举属性与不可枚举属性的可见性here https://developer.mozilla.org/en-US/docs/Enumerability_and_ownership_of_properties#Detection_Table.