第6章 继承
1.使用原型继承模式(而不是属性拷贝的方式)实现多重继承。例如:
var my = objectMulti(obj,another_obj,a_third,{
additional: "properties"
});
属性additional应该是私有属性,而其他属性则应该归并如prototype。
答:我也不是很清楚作者什么意思,我就想出这么一个挫方法,以后有了更好的方法再改吧。
function objectMulit() {
var n={};
var parent;
var np={};
var i=0;
var l=arguments.length;
for(i=0;i<l-1;i++){
parent=arguments[i];
for(var j in parent){
if(parent.hasOwnProperty([j])){
np[j]=parent[j];
}
}
}
n.prototype=np;
for(var j in arguments[l-1]){
if(arguments[l-1].hasOwnProperty([j])){
n[j]=arguments[l-1][j];
}
}
return n;
}
var obj={
attr1: "attr1"
};
var another_obj={
attr2: "arrt2"
};
var a_third={
attr3: "attr3"
};
var my=objectMulit(obj,another_obj,a_third,{
additional:"properties"
});
console.log(my);
ps:原书标准答案
function objectMulti() {
var Constr,
i,
prop,
mixme;
// constructor that sets own properties
var Constr = function (props) {
for (var prop in props) {
this[prop] = props[prop];
}
};
// mix into the prototype
for (var i = 0; i < arguments.length - 1; i++) {
var mixme = arguments[i];
for (var prop in mixme) {
Constr.prototype[prop] = mixme[prop];
}
}
return new Constr(arguments[arguments.length - 1]);
}
2.利用上面(书中前文,代码如下)的画布示例展开实践,
<!DOCTYPE html>