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 這半年來已經發生過好幾次了,當時解決後忘記記錄了,現在補記一下。查了一些資料,發生這種情況的原因有多種,...