原型

1.定義

原型是 function 對象的一個屬性,它定義了構造函數製造出的對象的公共祖先。通過該構造函數產生的對象,可以繼承該原型的屬性和方法。原型也是對象

Person.prototype = {	//原型(描述一種繼承關係),出生時就被定義好了
    age : 18,
    sex : "nan"
}
function Person(name) {  
    this.name = name
}
var p1 = new Person("xy");
console.log(p1);

在這裏插入圖片描述

構造函數的實例對象不能直接修改原型上的屬性或方法
Person.prototype = {
    age : 18,
    sex : "nan"
}
function Person(name) {  
    this.name = name
}

var p1 = new Person("xy");
p1.age = 19;	//試圖修改成19
console.log(p1);

我們打印出來看一下:
在這裏插入圖片描述
結果發現p1上多了屬性age,值是我們設置的19,而原型上還是18沒有變

我們可以通過__proto__來修改原型上的屬性或方法
Person.prototype = {
    age : 18,
    sex : "nan"
}
function Person(name) {  
    this.name = name
}

var p1 = new Person("xy");
p1.__proto__.age = 19;	
console.log(p1);

我們打印出來看一下:
在這裏插入圖片描述
結果發現原型上的值已經變了。

2.判斷實例對象和構造函數是否有關係

用isPrototypeOf或者instanceof

function Person() {  
}

var p1 = new Person();
console.log(Person.prototype.isPrototypeOf(p1))//true
console.log(p1 instanceof Person)//true

3.刪除屬性

delete p1.name				//只在實例中刪除
delete p1.__proto__.name	//只在原型中刪除

4.查找屬性

//只在實例中查找是否包含該屬性
p1.hasOwnProperty('name')	

//在實例或實例中查找是否包含該屬性
'name' in p1;				

//只在原型中查找是否包含該屬性
'name' in p1.__proto__;	
'name' in Person.prototype;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章