JavaScript继承

------------------------------原型继承与属性拷贝的混合使用--------------------------
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();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值