是否可以合并以下
function something() {}
function somethingElse() {}
somethingElse.prototype = new something();
somethingElse.prototype.someFunction = function() {}
...
用这个
somethingElse.prototype = {
someFunction: function() {},
...
}
并维护原型继承链
我猜这纯粹是化妆品。我想在{}中定义所有函数,而不是使用大量的...... prototype ... = ...
我见过很多,但从来没有把它们聚集在一起。
答案 0 :(得分:1)
我个人最喜欢的方法是获取underscore.js库。它有一个非常好的方法叫做extend来将属性粘贴到对象上。所以,我可以这样做:
function something() {}
function somethingElse() {}
somethingElse.prototype = new something();
_.extend(somethingElse.prototype, {
someFunction: function () { },
someOtherFunction: function () { }
});
答案 1 :(得分:0)
不同之处在于,在第二个版本中,somethingElse
个实例不会继承something
及其原型链中的任何内容。考虑到您的示例代码,但这并没有任何区别。
答案 2 :(得分:0)
嗯,他们的确非常相似。
foo = {}
foo.bar = baz
与
相同foo = {
bar: baz
}
这是一个品味问题。
BTW:用一个大写字母来命名构造函数(用new调用的任何东西)被认为是更好的样式,以区别于常规函数,因为混淆它们可能会做很糟糕的事情。答案 3 :(得分:0)
您可以使用Object.defineProperties
,但它实际上更详细,并且在旧版浏览器中没有支持:
Object.defineProperties(somethingElse.prototype,{
someOtherFunction: {
value:function() {...}
},
...
});
或者,您可以向Object原型添加一个基本的extend
方法:
Object.prototype.extend = function(obj){
for(var p in obj)this[p] = obj[p];
};
这将允许您这样做:
somethingElse.prototype.extend({
A:function(){'a'},
B:function(){'b'}
});
我一般会建议不要这样做,因为修改原生对象的原型可能会有点冒险。