Nic*_*son 8 javascript backbone.js
我试图toJSON在原型对象上定义一个不可枚举的函数而没有太多运气.我希望有类似于ECMAScript 5的东西toJSON:
Object.defineProperty(obj, prop, { enumerable: false });
Run Code Online (Sandbox Code Playgroud)
但是,这将其定义为无法作为方法访问的属性.
我希望能在一个不可枚举的方式来定义函数,因为我打算在所有基本类型(的原型定义String,Number,Boolean,Array,和Object),这样我就可以递归地处理复杂的对象应用的功能.
这里的最终目标是能够递归地使用嵌套集合JSONify Backbone模型/集合.
我想我总共有两个主要问题:
Pau*_* S. 16
我不明白,为什么你不能把它当作一种方法来访问它?
var foo = {};
Object.defineProperty(foo, 'bar', {
enumerable: false,
value: function () {console.log('foo.bar\'d!');}
});
foo.bar(); // foo.bar'd!
Run Code Online (Sandbox Code Playgroud)
如果你想在原型上使用它,就像它一样简单
Object.defineProperty(foo.prototype, /* etc */);
Run Code Online (Sandbox Code Playgroud)
甚至直接在 Object.create
foo.prototype = Object.create(null, {
'bar': {value: function () {/* ... */}}
});
Run Code Online (Sandbox Code Playgroud)
但是,除非您正在创建实例,否则如果您尝试foo,它将不会显示foo.bar,并且仅显示为foo.prototype.bar.
如果foo它有自己的原型(例如foo = Object.create({})),你可以使用它 Object.getPrototypeOf,将属性添加到该属性,然后foo.bar即使它不是实例也可以工作.
var proto = Object.getPrototypeOf(foo); // get prototype
Object.defineProperty(proto, /* etc */);
Run Code Online (Sandbox Code Playgroud)
您可以在此处查看可枚举与不可枚举属性的可见性.