高層自讀 建立物件

2021-07-27 04:36:18 字數 3705 閱讀 3842

function

createperson

(name, age, job);

return o;

}var person1 = createperson("nicholas", 29,"software engineer");

var person2 = createperson("greg", 27, "doctor");

function

person

(name, age, job);

}var person1 = new person("nicholas", 29,"software engineer");

var person2 = new person("greg", 27, "doctor");

(1) 建立乙個新物件;

(2) 將建構函式的作用域賦給新物件(因此this 就指向了z這個新物件);

(3) 執行建構函式中的**(為這個新物件新增屬性);

(4) 返回新物件。

每個方法都要在每個例項上重新建立一遍。

function

person

()person.prototype.name = "nicholas";

person.prototype.age = 29;

person.prototype.job = "software engineer";

person.prototype.sayname = function

() ;

var person1 = new person();

person1.sayname(); //"nicholas"

var person2 = new person();

person2.sayname(); //"nicholas"

alert(person1.sayname == person2.sayname); //true

所有原型物件都會自動獲得乙個constructor(建構函式)屬性,這個屬性包含乙個指向prototype 屬性所在函式的指標

isprototypeof();

alert(person.prototype.isprototypeof(person1)); //true

alert(person.prototype.isprototypeof(person2)); //true

object.getprototypeof()

alert(object.getprototypeof(person1) == person.prototype); //true

alert(object.getprototypeof(person1).name); //"nicholas"

存在引用型別缺陷

/*

* 存在的問題

*/function

person

()person.prototype =

};var person1 = new person();

var person2 = new person();

person1.friends.push("van");//只對p1進行了push;

/*但是下面p1、p2都發生了改變

*說明直接修改了friends陣列(**引用型別**)

*/alert(person1.friends); //"shelby,court,van"

alert(person2.friends); //"shelby,court,van"

alert(person1.friends === person2.friends); //true

這種建構函式與原型混成的模式,是目前在ecmascript 中使用最廣泛、認同度最高的一種建立自定義型別的方法。可以說,這是用來定義引用型別的一種預設模式。

/************************

* 建構函式+原型模式 *

* 建構函式來定義引用型別 *

* 最常用 *

************************

*/function person(name, age, job)

person.prototype =

}

/*

* * 動態原型方法

* */

function

person

(name, age, job) ;

}}var friend = new person("nicholas", 29, "softwareengineer");

friend.sayname();

/*

* * 寄生建構函式模式

* * 不能依賴instanceof 操作符來確定物件型別

* * */

function

person

(name, age, job) ;

return o;

}var friend = new person("nicholas", 29, "software engineer");

friend.sayname(); //"nicholas"

寄生建構函式模式和工廠模式沒有本質區別,通過new 操作符的就叫寄生建構函式模式,直接呼叫的就叫工廠模式

寄生建構函式專門用來為js原生的建構函式定義新的方法。。陣列,字串。

function

specialarray

() ;

//返回陣列

return values;

}var colors = new specialarray("red", "blue", "green");

alert(colors.topipedstring()); //"red|blue|green"

/*

* * 穩妥建構函式模式

* * 沒有公共屬性,而且其方法也不引用this 的物件

* * 數遵循與寄生建構函式類似的模式

* * 新建立物件的例項方法不引用this

* * 不使用new 操作符呼叫建構函式

* * 與寄生建構函式模式類似,使用穩妥建構函式模式建立的物件

* 與建構函式之間也沒有什麼關係,

* 因此instanceof 操作符對這種物件也沒有意義。

* **/

function

person

(name, age, job) ;

//返回物件

return o;

}//除了使用sayname()方法之外,沒有其他辦法訪問name 的值。

var friend = person("nicholas", 29, "software engineer");

friend.sayname(); //"nicholas"

高程 6 1理解物件自讀

物件擁有屬性,資料屬性和訪問器屬性 資料屬性 資料屬性包含資料值 value 資料屬性的特徵 用來描述資料屬性的行為 configurable 能否通過delete 刪除屬性從而重新定義屬性 能否修改屬性的特性 能否把屬性修改為訪問器屬性 enumerable 表示能否通過for in 迴圈返回屬性...

讀 SBO高層大變動 一文有感

看到這個訊息,震驚之餘而回味。sap內部人員的腐敗一直有道聽途說,我一直認為林子大了什麼鳥都有。有個別人有這樣那樣的問題也是正常的。沒想到出了這麼個事情。sap公司中國區sbo管理層一直是大家關注的,文中所提及的多種事情我也了解一些,的確是讓人大失所望呀。但這並不代表sap公司中國區sbo管理層都有...

Linux 硬碟自讀原因調查

以下是從網上查到 james qi 2011年11月1日 10 24 發布 linux機器的硬碟本來都是設定成讀寫 read write 方式的,不過偶爾會發現自動變成了唯讀 read only 這半年來已經發生過好幾次了,當時解決後忘記記錄了,現在補記一下。查了一些資料,發生這種情況的原因有多種,...