原文地址:http://www.cnblogs.com/ayqy/p/4471638.html
特别同意作者前面说的话
一直不喜欢JS的OOP,在学习阶段好像也用不到,总觉得JS的OOP不伦不类的,可能是因为先接触了Java,所以对JS的OO部分有些抵触。
而且我是相当抵触,因为我也是看了好多关于js继承的文章博客,看了那5、6、7、8种继承方式,而且看得稀里糊涂,总结就是:乱。
记录下作者说的最佳的方式,别的方式也懒得记了
寄生组合继承(最佳方式)
function beget(obj){ // 生孩子函数 beget:龙beget龙,凤beget凤。
var F = function(){};
F.prototype = obj;
return new F();
}
function Super(){
// 只在此处声明基本属性和引用属性
this.val = 1;
this.arr = [1];
}
// 在此处声明函数
Super.prototype.fun1 = function(){};
Super.prototype.fun2 = function(){};
//Super.prototype.fun3...
function Sub(){
Super.call(this); // 核心
// ...
}
var proto = beget(Super.prototype); // 核心
proto.constructor = Sub; // 核心
Sub.prototype = proto; // 核心
var sub = new Sub();
alert(sub.val);
alert(sub.arr);