構(gòu)造函數(shù)的屬性和方法

構(gòu)造函數(shù): function Cat (name ,color){
this.name = name;
this.color = color;
}

//生成實例對象
var cat1 = new Cat('大貓','黃色');
var cat2 = new Cat('小貓','藍(lán)色');
構(gòu)造函數(shù)是一個普通的函數(shù),但是內(nèi)部使用了this變量,對構(gòu)造函數(shù)使用new 運算符,就能生成實例,并且this變量會綁定在實例對象上。

cat1 和 cat2 會自動增加constructor 屬性,指向他們的構(gòu)造函數(shù)。
cat1.constructor == Cat //true;
cat2.constructor == Cat //true;

驗證原型對象與實例對象之間的關(guān)系
cat1 instanceof Cat //true
cat2 instanceof Cat //true

每一個構(gòu)造函數(shù) 都會有每一個prototype 屬性 這個對象上的屬性和方法都會被實例對象繼承。
我們要在Cat方法加上一個eat方法和type屬性 ,
function Cat(name,color){
this.name = name;
this.color = color;
this.type ='cat';
this.eat = function(){
alert('eat');
}
}
這樣的話 在每次創(chuàng)建實例對象的時候 type和eat() 方法都是一模一樣的內(nèi)容,多占用一些內(nèi)容,這樣不環(huán)保,也缺乏效率。

Cat.prototype.type ='cat';
Cat.protitype.eat = function(){
alert('eat');
}
把要增加的不變屬性和方法加到prototype上,可以使這些在內(nèi)存中只生成一次。

isPrototypeOf() 配合Protype屬性,來判斷某個Protype屬性和某個實例對象的關(guān)系
Cat.prototype.isProtypeOf(cat1);//true
Cat.protype.isProtypeOf(cat2);//true;

hasOwnProperty()
每一個實例對象都有一個hasOwnProperty()方法,來判斷某個屬性是否屬于示例對象還是繼承與構(gòu)造函數(shù)。
cat1.hasOwnProperty('name');//true;
cat2.hasOwnProperty('type');//false

in運算符
in運算符可以用來判斷,某個實例是否含有某個屬性,不管是不是自身屬性
‘name’ in cat1 //true;
'type' in cat1 //true;

in運算符還可以用來遍歷某個對象的所有屬性。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容