什麼是建構子
在一些物件導向的語言,如Java、C++、PHP中,建構子是很常見的。在Javascript中建構函數首先是一個普通的函數,它可以使用new 操作符來調用,並產生一個特殊類型的物件。
// "Benjamin" is a constructor var benjamin = new Benjamin("zuojj", "male");
在上面這個實例中benjamin是一個Benjamin對象,那麼它是如何來實例化的呢?
function Benjamin(username, sex) { this.username = username; this.sex = sex; } var benjamin = new Benjamin("zuojj", "male"); //Outputs: Benjamin{sex: "male",username: "zuojj"} console.log(benjamin);
如如我們所看到的,「Benjamin」建構子只是接收傳遞過來的參數,並且把它們賦值給this物件。這是因為當建構子被new操作符呼叫時,建構子的this物件賦值為new操作傳回的物件。
這表示上面的程式碼等同於:
benjamin = { "username": "zuojj", "sex": "male" }
為什麼要使用建構子
為什麼要使用建構函數,有以下幾個面向的原因:
1.使用建構函數,意味著所有的這些對象,都可以使用相同的基本結構創建
2.使用建構函數,意味著「benjamin」物件被明確的標記為「Benjamin」函數的實例
function Benjamin(username, sex) { this.username = username; this.sex = sex; } var benjamin = new Benjamin("zuojj", "male"); var ben = { "username": "zuojj", "sex": "male" } //Outputs: true console.log(benjamin instanceof Benjamin); //Outputs: false console.log(ben instanceof Benjamin);
3.使用建構函數,意味著我們可以在原型上定義公共方法,供多個實例共享
function Benjamin(username, sex) { this.username = username; this.sex = sex; } Benjamin.prototype.getName = function() { return this.username; } var benjamin = new Benjamin("zuojj", "male"); var ben = new Benjamin("lemon", "female"); //Outputs: zuojj console.log(benjamin.getName()); //Outputs: lemon console.log(ben.getName());
三、注意事項
1.new 關鍵字
在實例化建構函數的時候一定不要忘了使用new關鍵字,是否使用new關鍵字,對this物件的影響很大,不用new關鍵字的情況下,this物件會指向全域物件(window in browser and global in node)。因此定義建構函數時,建議函數名稱首字母大寫。
2.如果被呼叫的函數沒有明確的return 表達式,則隱式的會返回this 對象– 也就是新創建的對象,否則將會影響返回的結果,但僅限於返回的是一個對象
function Bar() { return 2; } var bar = new Bar(); //返回新创建的对象 //Outputs: Bar {} console.log(bar); function Test() { this.value = 2; return { foo: 1 }; } var test = new Test(); //返回的对象 //Outputs: Object {foo: 1} console.log(test);
我們要注意的是:
a) new Bar() 回傳的是新建立的對象,而不是數字的字面值2。 因此new Bar().constructor === Bar,但如果返回的是數字對象,結果就不同了;
b) 這裡得到的new Test()是函數返回的對象,而不是透過new關鍵字新建立的對象,如下所示:
function Bar() { return 2; } var bar = new Bar(); function BarN() { return new Number(2); } var barn = new BarN(); //Outputs: true console.log(bar.constructor === Bar); //Outputs: Number {} console.log(barn); //Ouputs: false console.log(barn.constructor === BarN); //Outputs: true console.log(barn.constructor === Number); /* -------------------------------------- */ function Test() { this.value = 2; return { foo: 1 }; } var test = new Test(); //Outputs: undefined console.log(test.value); //Ouputs: 1 console.log(test.foo);
以上是Javascript什麼是建構函式?如何使用建構函數實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!