JS高級類,簡單繼承

原型模式(prototype):

1 原型是一個對象,其他對象可以通過它實現屬性繼承,所有的對象默認情況下都有原型。原型本身也是對象,所以,一個類的真正原型是被類的內部的【Prototype】屬性指出。

2 在js中一個對象就是任何的無序的鍵值對的集合。

  如果他不是主數據類型(number,undefined,null,string,boolean)其他的通通叫對象。

3 js中的原型(prototype)是和function緊密連接的。

每一個通過new生成的對象或簡易方法生產的對象(var a={ })都有一個屬性__proto__,這個屬性保存了創建它的構造函數的原型的引用。

用函數生成的對象通過prototype訪問原型。

eg:

function person(){}//定義一個空對象
person.prototype.name="Anna";
person.prototype.showName=function(){
//這個this代表調用本函數的具體的實例化的類
alert(this.name);
}
new person().showName();
eg2:

var cat={}//定義一個空對象
cat.protoptye.name="kitty";
//報錯: Cannot set property 'name' of undefined
//用簡單方式sheng成的對象不能通過prototype訪問原型

//默認調用下面的方式

//得到原型鏈的引用
Object.getPrototypeOf(cat).name="kitty";//方式一
cat.__proto__.master="Jack;"
//常用寫法
cat.age=2;
cat["sex"]="name";
alert(cat.name+" "+cat.age+" "+cat["sex"]+" "+cat.master);
//結果:kitty 2 name Jack;

利用原型鏈實現簡單繼承

function per(){
this.getName=function(str){
alert(str);
  }
}
per.prototype.getAge=function(age){
alert(age);
}

var a={};
a.__proto__=per.prototype;
a.getAge(1);
//結果:1


注意:a 與per並無關係

function per(){
this.getName=function(str){
alert(str);
  }
}
per.prototype.getAge=function(age){
alert(age);
}

var a={};
a.__proto__=new per();
//改變constructor
a.__proto__.constructor=a;
a.getName("Jack");
a.getAge(1);

原型鏈繼承

function m(){
	this.showM=function(){
	alert("my name is m");
	}
}
function n(){
	this.showN=function(){
	alert("my name is n");
	}
}
n.prototype=new m();
n.prototype.constructor=n;
function a(){};
a.prototype=new n();
a.prototype.constructor=a;
var test=new a();
test.showM();
test.showN();





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章