1.函數
/* -- 類式繼承 -- */
//先聲明一個超類測試
function Person(name) {
this.name = name;
}
//給這個超類的原型對象上添加方法 getName
Person.prototype.getName = function() {
return this.name;
}
//實例化這個超
var a = new Person('Darren1')
console.log(a.getName());//Darren1 this
//再聲明類spa
function Programmer(name, sex) {
//這個類中要調用超類Person的構造函數,並將參數name傳給它
Person.call(this, name);
this.sex = sex;
}
//這個子類的原型對象等於超類的實例
Programmer.prototype = new Person();
//由於子類的原型對象等於超類的實例,因此prototype.constructor這個方法也等於超類構造函數,你能夠本身測試一下,若是沒這一步,console.log(Programmer.prototype.constructor這個是Person超類的引用,因此要重新賦值爲本身自己prototype
console.log(Programmer.prototype.constructor);
/*function Person(name) {
this.name = name;
} */對象
Programmer.prototype.constructor = Programmer;
console.log(Programmer.prototype.constructor);繼承
/*function Programmer(name, sex) {
Person.call(this, name);
this.sex = sex;
}
*/
//子類自己添加了getSex 方法
Programmer.prototype.getSex = function() {
return this.sex;
}
//實例化這個子類
var _m = new Programmer('Darren2', 'male');
//自身的方法
console.log(_m.getSex());//male
//繼承超類的方法
console.log(_m.getName());//Darren2 get
2.
/* -- 原型式繼承 -- */
//clone()函數用來建立新的類Person對象
var clone = function(obj) {
4
var _f = function() {};
//這句是原型式繼承最核心的地方,函數的原型對象爲對象字面量
_f.prototype = obj;
return new _f;
}
//先聲明一個對象字面量
var Person = {
name: 'Darren',
getName: function() {
return this.name;
}
}
//不須要定義一個Person的子類,只要執行一次克隆便可
var Programmer = clone(Person);
//能夠直接得到Person提供的默認值,也能夠添加或者修改屬性和方法
alert(Programmer.getName())
Programmer.name = 'Darren2'
alert(Programmer.getName())原型
//聲明子類,執行一次克隆便可
var Someone = clone(Programmer);io