ecmascript中的建構函式可以用來創造特定型別的物件,object和array 是原生建構函式,在 執行時會自動出現在執行環境。也可以自定義建構函式,示例如下:
function person(name,age,job);}var person1 = new person("
wsc",25,"
software engineer");
var person2 = new person("
yl",26,"
doctor
");
注意:按照慣例,建構函式始終都應該以乙個大寫字母開頭,而非建構函式則應該以乙個小寫字母開頭,目的是區別ecmascript中的其他函式,因為建構函式也是函式,只是配用來建立物件;
(1).建立person新例項,必須使用new操縱符。這種方式呼叫建構函式實際上經歷一下4個步驟:
1.建立乙個新物件;
2.將建構函式的作用域賦給新物件;
3.執行建構函式中的**;
4.返回新物件;
(2).建構函式都有乙個建構函式屬性constructor,該屬性指向該物件所屬的例項,以前面的例子為準:
alert(person1.constructor == person);//true
1.物件的constructor屬性主要目的是用來標識物件型別;
2.檢測物件型別主要是用instanceof,示例如下:
alert(person1 instanceof object);//true 注意:所有的物件均繼承object
alert(person1 instanceof person);//true
3.建立自定義建構函式意味著將來可以將它的實力標識為一種特定的型別,這是構造模式勝過工廠模式的地方,
注意:以這種方式的建構函式是定義在global物件中的;
(3).建構函式與其他函式的唯一區別是呼叫方式的不同:任何函式只要通過new操作符來呼叫,那麼它就作為建構函式;任何函式如果不通過new操作符來呼叫,那麼它就作為普通函式;
//當作建構函式
var person = new person("
wsc",26,"
software engineer");
person.sayname();
//"wsc";
//普通函式
person("
wsc",26,"
software engineer
");//
新增到window
window.sayname()//
"wsc"
//在另乙個物件的作用域中呼叫
var o = new
object();
person.call(o,
"wsc
",26,"
software engineer");
o.sayname();
//"wsc"
(4).建構函式的問題
建構函式的主要問題是:每個方法都要在每個例項上重新建立一遍。
以上面的例子為例:從邏輯上,此時的建構函式還可以如下定義。
functionperson(name,age,job)
//在這裡ecmascript中的函式也是物件;
此種方式建立函式,會導致不同的作用域鏈和識別符號解析,但在建立function新例項的機制仍然是相同的。因此不同例項上同名的函式是不等的。
解決此問題的方式如下:
functionperson(name,age,job)
function
sayname()
var person1 = new person("wsc",29,"software engineer");
var person2 = new person("wife",26,"techer");
alert(person1.sayname === person2.sayname);//
?
但此種方式,又會產生新的問題:全域性函式只能被某個物件呼叫,如果物件需要定義很多方法,這就需要定義多個全域性函式。如何解決呢?看原型
JavaScript 建立物件 建構函式模式
建構函式模式 ecmascript中的建構函式可以用來建立特定型別的物件,也可以建立 例2 function person name,age var person1 new person tim 35 var person2 new person bob 40 person1.getname tim...
建立物件之二 建構函式模式
ecmascript中的建構函式可以用來建立特定型別的物件。比如object和array這樣的原生建構函式,在執行時會自動出現在執行環境中。也可以建立自定義的建構函式,從而定義自定義物件型別的屬性和方法 function person name,age,job var person1 newpers...
建構函式模式
已經n天沒有學習了。中間辦了好多事,關乎人生大事,所以斷了學習。貌似理由很充分。總之,今天是十一長假的第二天,沒打算出去玩,把前段時間沒學習的趕緊彌補一下吧。上回說到建立物件時用的工廠模式,減少了 重複,可是不能區分出每個例項所對應的物件,於是建構函式登場了。function createobjec...