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;