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網站:https://blog.csdn.net/magneto7/article/details/24913525

You May Also Like