使用 Object.create() 将函数与原型上的属性合并
Merging functions with properties on a prototype using Object.create()
var blah = (function(){
function ret(){
}
ret.prototype = Object.create(Object.prototype, {
getone: {
get: function() { return 1; }
},
funcstuff: function(){ console.log('funcstuff'); }
});
return ret;
})();
var b = new blah();
console.log(b.getone); // 1
b.funcstuff(); // Uncaught TypeError: Property 'funcstuff'
// of object #<Object> is not a function
我想知道使用上述Object.create()
将funcstuff
添加到ret
原型的正确语法。
http://jsfiddle.net/Qy9Vm/
我想知道使用上面的 Object.create() 将 funcstuff 添加到 ret 原型的正确语法。
由于您提供给Object.create
定义属性的对象是属性描述符,因此如果您希望funcstuff
实际上是一个函数,则可以将其定义为描述符中的value
属性:
ret.prototype = Object.create(Object.prototype, {
getone: {
get: function() { return 1; }
},
funcstuff: { // changes
value: function(){ console.log('funcstuff'); } // changes
} // changes
});
我认为正确的语法是:
var blah = (function(){
function ret(){
}
ret.prototype = Object.create(Object.prototype, {
getone: {
get: function() { return 1; }
},
funcstuff: { value: function(){ console.log('funcstuff'); } }
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
});
return ret;
})();
var b = new blah();
console.log(b.getone); // 1
b.funcstuff();
Object.create()
不接受函数或属性,它需要一个属性描述符,该描述符本身是一个具有标准属性的对象,可以像configurable
、enumerable
......等。
相关文章:
- 附加到原型属性的Do函数没有闭包
- 日期原型属性
- JS构造函数的原型属性与其原型之间的区别
- 为什么函数对象的实例没有继承函数原型属性
- 为什么浏览器显示原型属性不同
- 为什么在Function.prototype上没有原型属性
- 函数的原型属性
- 原型继承和原型属性
- 在JavaScript中,函数的默认值是多少'的原型属性
- Chrome 不支持 Javascript 中的原型属性吗?
- 我应该在JavaScript中将什么连接到子原型属性
- 更新 JavaScript 中的原型属性
- 请解释有关 JavaScript 中的原型属性和函数构造函数的详细信息
- 为什么原型函数无法读取原型属性
- 与对象属性同名的原型属性
- 如何获取原型属性列表
- 构造函数中的方法与函数的原型属性之间的差异
- JavaScript 原型属性
- 函数对象__proto__和原型属性
- 未在自定义 OL3 控件的构造函数中定义的原型属性