------------------------------原型继承与属性拷贝的混合使用--------------------------
1. 使用原型继承的方式, 将一个已有对象设置为新对象的原型
2. 新建一个对象后, 将另一个已有对象的所有属性拷贝过来
/*
**o用于原型继承,stuff用于属性拷贝
*/
function objectPlus(o, stuff) {
// 原型继承
var n;
function F() {}
F.prototype = o;
n = new F();
n.uber = o;
//属性拷贝
for (var i in stuff) {
n[i] = stuff[i];
}
return n;
}
var shape = {
name: 'shape',
toString: function() {
return this.name;
}
};
var twoDee = objectPlus(shape, {
name: '2D shape',
'toString': function() {
return this.uber.toString() + ', ' + this.name;
}
});
var triangle = objectPlus(twoDee, {
name: 'triangle',
getArea: function() {
return this.side * this.height / 2;
},
size: 0,
height: 0
});
var my = objectPlus(triangle, {
side: 4,
height: 4
});
my.getArea();
my.toString();
----------------------------------多重继承---------------------------------------------
function multi(){
var n={},stuff,len=arguments.length,j=0;
for (var j =0;j<len;j++) {
stuff = arguments[j];
for(var i in stuff){
n[i]=stuff[i];
}
}
return n;
}
---------------------------------寄生式继承------------------------------------------
//原型继承
function object(o) {
function F() {}
var n;
F.prototype = o;
n = new F();
n.uber = o;
return n;
}
var twoD = {
name:'2D shape',
dimensions:2
}
// 寄生式继承
function triangle(s,h){
var that = object(twoD);
that.name='hello';
that.getArea = function(){
return this.size*this.height/2;
};
that.size = s;
that.height = h;
return that;
}
---------------------------------构造器借用------------------------------------------
function Shape(id){
this.id = id;
}
Shape.prototype.name = 'shape';
Shape.prototype.toString = function(){
return this.name;
}
function Triangle(){
Shape.apply(this,arguments);
}
Triangle.prototype.name = 'triangle';
var t = new Triangle(101);
t.name; //'triangle'
t.id; //101
//原型不继承,只继承构造器。若需要继承原型需要 Triangle.prototype = new Shape();
JavaScript继承
最新推荐文章于 2024-01-11 22:13:27 发布