我一直在阅读Javascript中的继承,并且已经想出了创建构造函数并定义每个构造函数原型。我创建了一个prototypeExtend
函数,它将遍历每个构造函数原型并将它们添加到主构造函数原型中。
这是实现继承的实用方法吗?
function prototypeExtend() {
var cMain = arguments[0].prototype;
for(var i=1; i<arguments.length; i++){
var cTemp = arguments[i].prototype;
for(var k in cTemp){
if(cTemp.hasOwnProperty(k)){
cMain[k] = cTemp[k];
}
}
}
return cMain;
}
function Class1 () {}
Class1.prototype = {
el1:null,
fun1:function(str){
console.log(str + " from Class1");
},
setEl1:function(value){
this.el1 = value;
},
getEl1:function(){
return this.el1;
}
}
function Class2(){}
Class2.prototype = {
el2:"blah",
fun2:function(str){
console.log(str + " from Class2");
}
}
function Class3(){}
Class3.prototype = {
el3:"dah",
fun3:function(str){
console.log(str + " from Class3");
},
fun1:function(str){
console.log(str + " from Class3");
}
}
prototypeExtend(Class2, Class1, Class3);
var obj = new Class2;
console.log(obj);
答案 0 :(得分:1)
在这种状态下,我可以想到你可能没有看到的东西。您可以直接在原型说明中为对象的属性提供默认值。请记住,对象(和函数)将通过引用传递,因此如果我可以引用Java,这些属性将是 static 。对象的任何更改都会影响其他所有引用。
当您需要覆盖功能并仍然使用父母的功能时,您还必须更改代码。
如果您的目标是开发自己的图书馆,那么请记住并继续! ;) 无论如何,您应该看看其他人在网络上做了什么。我个人一直在使用classjs,它为我做了这份工作!
答案 1 :(得分:0)
以下是原型与功能继承的好例子
http://artandlogic.com/2012/07/prototypal-vs-functional-inheritance-in-javascript/
这似乎是一个非常基于意见的问题所以没有错误或正确。我个人喜欢原型方法。
EDIT1:还看看道格拉斯·克罗克福德 - 他有自己的实现,并且是许多人关注的javascript大师
http://javascript.crockford.com/prototypal.html
我希望这能指出你正确的方向