国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

Javascript 構造函數詳解

2024-05-06 16:10:01
字體:
來源:轉載
供稿:網友
Javascript構造函數是非常強大的,它可能也是Javascript能被充分利用的特點之一。但是如果你想真正的了解Javascript,你還是應該明白構造函數是如何工作的。本文,我們將從三個方面來講述構造函數。
 
 

一、什么是構造函數

在一些面向對象的語言,如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);

 

以上就是對構造函數的總結,希望對初學者有所幫助,文中不妥之處,望批評、斧正。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 馆陶县| 寿光市| 尚志市| 高尔夫| 陕西省| 海阳市| 永丰县| 鹤山市| 长子县| 缙云县| 廉江市| 蓝山县| 巴青县| 西丰县| 淮安市| 上杭县| 天全县| 醴陵市| 兴义市| 丹江口市| 奉贤区| 南开区| 尉氏县| 墨玉县| 浮梁县| 澄迈县| 太白县| 徐州市| 萝北县| 九龙坡区| 池州市| 汉川市| 阿勒泰市| 余江县| 乌拉特中旗| 定襄县| 水富县| 开封市| 多伦县| 开江县| 博乐市|