在js中我們常常使用構造函數
今天我們來講一下構造函數的prototype屬性
function Person(){
}
var a=new Person();
console.log(a)
在檢查下發現Person類中有個prototype屬性,這就是我們今天要說的原型對象
當我們在全局作用域中創建一個個構造函數時,就會對全局作用域造成污染,如上代碼,當我們再次創造一個Person構造函數時,第一Person構造函數就會被覆蓋。如需解決這個問題,我們就需要用到構造函數的prototype屬性。
我們先來了解一下他的基本性質
- 每個構造函數都有prototype屬性
- 子元素可以使用__proto__(兩個下劃線)去訪問構造函數的protype屬性
function Person(){ } var a=new Person(); console.log(a.__proto__)
- 每個構造函數的protype不相等
瞭解他的基本性質之後,我們就可以開始用了
function Person(){
Person.prototype.b=123;
}
var a=new Person();
console.log(a.b)
若我們不想用初始值,可以用子元素重新定義
function Person(){
Person.prototype.b=123;
}
var a=new Person();
a.b="zhangsan";
console.log(a.b)
ps:當子元素重新定義後Person.prototype.b還是等於123,
然後我們可以這樣用
function Person(){
Person.prototype.b=function(){
console.log("zzg")
};
}
var a=new Person();
a.b();
這樣我們創建的b方法就不會污染全局作用域,不容易被下面的代碼覆蓋。