建立物件 原型模型

2021-09-03 08:28:25 字數 2444 閱讀 3098

1. 原型物件:通過呼叫建構函式而建立的物件的例項都有乙個原型物件,該原型物件包含同乙個建構函式建立的物件所共享的屬性和方法。

2. prototype屬性:建立的每個函式都有乙個prototype屬性,該屬性是乙個指標,指向原型物件。

3. 使用原型物件的好處是:讓所有的物件例項共享他所包含的屬性和方法。

如:    function person()

console.log(object.getprototypeof(p1).name);    //rourou   

5. 不能通過物件例項重寫原型物件中的值,但可以通過物件例項訪問原型物件中的值。(在讀取某個物件中的屬性時,首先會先搜尋物件例項本身,如果沒有搜尋原型物件)。通過delete刪除屬性或方法(原型物件和例項物件都可以刪除)

function person(){

person.prototype.name = "rourou";

person.prototype.age = 22;

person.prototype.sayname = function(){

console.log(this.name);

var p1 = new person();

var p2 = new person();

p1.name = "baobao";

console.log(p1.name);    //baobao

console.log(p2.name);   //rourou----可以看出,通過物件的例項不能重寫屬性,只能覆蓋屬性(與訪問順序有關)       

delete p1.name;  

console.log(p1.name); //rourou

delete person.prototype.name;

console.log(p2.name); //undefined

6. hasownproperty():判斷乙個屬性是存在於例項中還是原型中。在例項中返回true

in操作符:在可以訪問給定屬性時,返回true。(無論該屬性是在例項中還是原型中)

如:① hasownproperty()

function person(){

person.prototype.name = "rourou";

person.prototype.age = 22;

person.prototype.sayname = function(){

console.log(this.name);

var p1 = new person();

var p2 = new person();

p1.name = "baobao";

console.log(p1.hasownproperty("name"));   //true

console.log(p1.hasownproperty("age"));     //false

console.log("age" in p1);   //true

圖例:

7. 更簡單的原型語法:        

這裡將person.prototype的所有例項屬性封裝在一起。(相當於重寫)但是缺點是原型屬性的constructor指向的是object建構函式。

圖例:

可以將constructor指向person建構函式

8. 原型的動態性:如果不重寫原型物件,那麼先建立物件,再在原型物件中新增屬性,還是先在原型物件中新增屬性,在建立物件,都是可以訪問到相應的屬性和方法的。

但是,如果重寫了原型物件,那麼先建立還是後建立就有區別了。因為先建立物件再重寫時,例項物件指向的是原來的原型物件。(會切斷現有例項與新原型之間的聯絡

圖例:所以訪問後來新增的屬性,值為undedined      

原型模式 建立物件

原型模式 操作 先建立好乙個原型物件,然後通過clone 原型物件來建立新的物件。這就免去了類建立時重複的初始化操作。原型模式適用於大物件的建立。如果每次new 就會消耗很大,原型模式僅需要記憶體拷貝即可。index.php 中 prototype new imooc canvas prototyp...

建立物件及原型模式

工廠模式 function createperson name,age return o createperson 小明 18 建構函式模式 funciton person name age function say var person1 person 小明 18 建構函式的呼叫方式,需要建立 p...

建立物件之原型模式

1,原型模式建立物件 原型也是乙個物件。我們建立的函式都有乙個prototype屬性,這個屬性指向乙個物件,這個物件包含有特定函式建立的例項共享的屬性和方法。使用原型物件可以使所有的例項共享屬性和方法,而不必再建構函式中初始化屬性和方法。function person person.prototyp...