JS:prototype的內存分析

/**
 * 以下演示了通過原型的創建方式,使用基於原型的創建可以將屬性和方法
 * 設置爲Person專有的,不能通過window來調用。
 * 原型是JavaScript中的一個特殊對象,當一個函數創建之後,會隨之就產生一個原型對象
 * 當通過這個這個函數的構造函數創建了一個具體的對象之後,在這個具體的對象中,就會有一個屬性指向原型
 */
//第一種狀態                                     
function Person(){                       
  
}

//第二種狀態
Person.prototype.name = "octopus";         
Person.prototype.age = 23;
Person.prototype.say = function(){       
  alert(this.name+":"+this.age);
}

//第三種狀態
var p1 = new Person();
p1.say();  //octopus:23
say();  //say is not defined 通過window沒有辦法調用say方法,如此就完成了封裝

//檢測p1是否有_prop_指向Person的原型
alert(Person.prototype.isPrototypeOf(p1));  //true

//第四種狀態
var p2 = new Person();
p2.name = "Ada";
p2.say();  //Ada:23

//檢測p1是否有_prop_指向Person的原型
alert(Person.prototype.isPrototypeOf(p1));  //true
//檢測某個對象的constructor
alert(p1.constructor==Person);  //true
//檢測某個屬性是否是自己的屬性
alert(p1.hasOwnProperty("name")); //false p1自己的空間中沒有值
alert(p2.hasOwnProperty("name")); //true  p2在自己的空間中設置了name
//可以通過delete刪除空間中的屬性
delete p2.name;
p2.say(); //octopus:23
alert(p2.hasOwnProperty("name")); //false

//檢測某個對象在原型或者自己中是否包含某個屬性,通過 in 檢測
alert("name" in p1);  //true 

alert("address" in p1);  //false

 

-------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

原創文章如轉載,請註明出處,本文首發於csdn網站:http://blog.csdn.net/magneto7/article/details/24913525
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章