欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

JavaScript中構(gòu)造器指的是什么-創(chuàng)新互聯(lián)

小編給大家分享一下JavaScript中構(gòu)造器指的是什么,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

創(chuàng)新互聯(lián)秉承實(shí)現(xiàn)全網(wǎng)價(jià)值營銷的理念,以專業(yè)定制企業(yè)官網(wǎng),成都網(wǎng)站制作、做網(wǎng)站、外貿(mào)營銷網(wǎng)站建設(shè),微信小程序開發(fā),網(wǎng)頁設(shè)計(jì)制作,手機(jī)網(wǎng)站開發(fā),網(wǎng)絡(luò)營銷推廣幫助傳統(tǒng)企業(yè)實(shí)現(xiàn)“互聯(lián)網(wǎng)+”轉(zhuǎn)型升級專業(yè)定制企業(yè)官網(wǎng),公司注重人才、技術(shù)和管理,匯聚了一批優(yōu)秀的互聯(lián)網(wǎng)技術(shù)人才,對客戶都以感恩的心態(tài)奉獻(xiàn)自己的專業(yè)和所長。

對構(gòu)造函數(shù)有很好的理解是你掌握J(rèn)avaScript這門語言的重點(diǎn)。我們都知道JavaScript不像其他語言,它沒有class關(guān)鍵字,但是它有跟function非常相似的構(gòu)造函數(shù)。這篇文章我們一起來詳細(xì)地了解JavaScript構(gòu)造函數(shù)如何構(gòu)造對象。

構(gòu)造函數(shù)跟普通函數(shù)非常相似,但是我們通過new關(guān)鍵字來使用它們。主要有兩種類型的構(gòu)造函數(shù),native構(gòu)造函數(shù)(Array,Object)它們可以在執(zhí)行環(huán)境中自動(dòng)生成,還有自定義的構(gòu)造函數(shù),你可以定義自己的方法和屬性。

當(dāng)你想要?jiǎng)?chuàng)建很多相似的對象(擁有相同的屬性和方法)的時(shí)候,使用構(gòu)造函數(shù)是非常有效的。大部分程序員都遵循公約,使用大寫字母開頭來將構(gòu)造函數(shù)和普通函數(shù)區(qū)分開。看看下面的代碼。

function Book() { 
    // unfinished code
} 
var myBook = new Book();

最后一行代碼創(chuàng)建了一個(gè)Book對象,并把它賦值給變量;這樣完成之后,即使Book構(gòu)造器沒有做任何操作,myBook也是Book實(shí)例。正如你看到的,除了首字母大寫和使用new關(guān)鍵字之外,構(gòu)造函數(shù)和普通函數(shù)并沒有什么區(qū)別。

判斷實(shí)例的類型

判斷某個(gè)對象是否為某種實(shí)例,我們可以使用instanceof操作符:

myBook instanceof Book    // => true
myBook instanceof String  // => false

注意:如果右邊不是一個(gè)函數(shù)的實(shí)例,那么將會(huì)報(bào)錯(cuò):

myBook instanceof {}; // => TypeError: invalid 'instanceof' operand ({})

另一種方法是使用constructor屬性,所有對象實(shí)例都有一個(gè)constructor屬性,這個(gè)屬性指向創(chuàng)建它的構(gòu)造函數(shù)。

myBook.constructor == Book;   // => true

就像myBook的constructor指向Book一樣。 所有對象都從它們的原型上繼承了constructor這個(gè)屬性:

var s = new String("text");
s.constructor === String;      // => true
"text".constructor === String; // => true
var o = new Object();
o.constructor === Object;      // => true
var o = {};
o.constructor === Object;      // => true
var a = new Array();
a.constructor === Array;       // => true
[].constructor === Array;      // => true

盡管使用constructor可以用來檢測實(shí)例類型,但是建議還是使用instanceof方法。因?yàn)閏onstructor屬性是可以被重寫的..用起來不太靠譜。

自定義構(gòu)造函數(shù)

構(gòu)造函數(shù)就像餅干印模。同一印模制作出來的,都是同一個(gè)diao樣(男人沒一個(gè)好東西也是這個(gè)道理)。

function Book(name, year) {
    this.name = name;
    this.year = '(' + year + ')';
}

Book構(gòu)造器需要兩個(gè)參數(shù),當(dāng)使用new關(guān)鍵字構(gòu)造對象時(shí),會(huì)把兩個(gè)形參傳給Book對象的name 和 year。

var firstBook = new Book("Pro AngularJS", 2014);
var secondBook = new Book("Secrets Of The JavaScript Ninja", 2013); 
var thirdBook = new Book("JavaScript Patterns", 2010);

console.log(firstBook.name, firstBook.year);           
console.log(secondBook.name, secondBook.year);           
console.log(thirdBook.name, thirdBook.year);

JavaScript中構(gòu)造器指的是什么

如你所見,我們可以通過傳不同參數(shù),快速創(chuàng)建另一本書。JavaScript的Array(),Date()也是這個(gè)道理。


Object.defineProperty 方法

Object.defineProperty 方法可以在構(gòu)造器中被使用來配置屬性。

function Book(name) { 
    Object.defineProperty(this, "name", { 
        get: function() { 
            return "Book: " + name;       
        },        
        set: function(newName) {            
            name = newName;        
        },               
        configurable: false     
    }); 
}
var myBook = new Book("Single Page Web Applications");
console.log(myBook.name);    // => Book: Single Page Web Applications
// we cannot delete the name property because "configurable" is set to false
delete myBook.name;    
console.log(myBook.name);    // => Book: Single Page Web Applications
// but we can change the value of the name property
myBook.name = "Testable JavaScript";
console.log(myBook.name);    // => Book: Testable JavaScript

上面的代碼中是調(diào)用了祖先的方法。它提供了getter和setter接口。getter方法負(fù)責(zé)返回封裝的值,setter方法接受參數(shù),并把值賦給屬性。當(dāng)我們在某個(gè)屬性上操作存取時(shí),調(diào)用的就是這兩個(gè)方法。通過配置configurable,我們可以設(shè)置該值能否被刪除。

對象字面量表示法是選的構(gòu)造函數(shù)

JavaScript語言九種內(nèi)建的構(gòu)造器:Object(), Array(), String(), Number(), Boolean(), Date(), Function(), Error() 以及 RegExp()。當(dāng)我們需要?jiǎng)?chuàng)建這些值的時(shí)候,我們可以自由選擇使用字面量或者構(gòu)造器。但是相同情況下,字面量對象不僅易讀,而且運(yùn)行速度更快,因?yàn)樗麄兛梢栽诮馕龅臅r(shí)候被優(yōu)化。所以當(dāng)你需要使用簡單對象的時(shí)候就使用字面量吧。

// a number object
// numbers have a toFixed() method
var obj = new Object(5);
obj.toFixed(2);     // => 5.00
// we can achieve the same result using literals
var num = 5;
num.toFixed(2);     // => 5.00
// a string object
// strings have a slice() method 
var obj = new String("text");
obj.slice(0,2);     // => "te"
// same as above
var string = "text";
string.slice(0,2);  // => "te"

使用new關(guān)鍵字是必不可少的

記得使用構(gòu)造器的時(shí)候要用new關(guān)鍵字,如果你不小心忘記了,那么構(gòu)造器中的this指向的是global對象(瀏覽器中默認(rèn)為window)。

function Book(name, year) {
    console.log(this);
    this.name = name;
    this.year = year;
}
var myBook = Book("js book", 2014);  
console.log(myBook instanceof Book);  
console.log(window.name, window.year);
var myBook = new Book("js book", 2014);  
console.log(myBook instanceof Book);  
console.log(myBook.name, myBook.year);

上面的代碼運(yùn)行結(jié)果如下所示:

JavaScript中構(gòu)造器指的是什么

如果是在嚴(yán)格模式下,上面的代碼將會(huì)拋出錯(cuò)誤,因?yàn)閲?yán)格模式不允許我們不使用new關(guān)鍵字調(diào)用構(gòu)造器。

適用范圍更高的構(gòu)造器

為了解決可能會(huì)忘記使用new關(guān)鍵字的風(fēng)險(xiǎn),我們可以通過判斷this的值創(chuàng)建適用范圍更高的構(gòu)造器。

function Book(name) { 
    if (!(this instanceof Book)) { 
        // the constructor was called without "new".
        return new Book(name);
    } 
}

加上這段代碼之后,我們就可以‘肆無忌憚’地使用構(gòu)造器了。

function Book(name, year) { 
    if (!(this instanceof Book)) { 
        return new Book(name, year);
    }
    this.name = name;
    this.year = year;
}
var person1 = new Book("js book", 2014);
var person2 = Book("js book", 2014);
console.log(person1 instanceof Book);    // => true
console.log(person2 instanceof Book);    // => true

很多內(nèi)建的構(gòu)造器都是這么做的。通過判斷this是否為當(dāng)前類型。如果程序員忘記加new關(guān)鍵字,那么我們就返回一個(gè)通過new出來的對象。

結(jié)論

JavaScript沒有類這種說法(但是它可以使面向?qū)ο蟮模詫τ诹?xí)慣了使用類的程序員來說是種困惑。當(dāng)然JavaScript的構(gòu)造函數(shù)跟普通函數(shù)沒什么區(qū)別,只是通過new關(guān)鍵字生成出來而已。如果我們需要”印餅干”的話,它就非常有用了。

看完了這篇文章,相信你對JavaScript中構(gòu)造器指的是什么有了一定的了解,想了解更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

當(dāng)前題目:JavaScript中構(gòu)造器指的是什么-創(chuàng)新互聯(lián)
網(wǎng)頁URL:http://aaarwkj.com/article40/gojho.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)、外貿(mào)建站外貿(mào)網(wǎng)站建設(shè)、App設(shè)計(jì)、品牌網(wǎng)站制作、網(wǎng)站營銷

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)
一区二区三区毛片观看| 亚洲国产精品一区二区三区在线| 国产天美剧情av一区二区| 丰满人妻二区三区性色| 久久免费看少妇高潮av| 和富婆啪啪一区二区免费看| 免费搜索国产男女视频| 97视频在线视频免费| 线上免费看黄色亚洲片| 国产尹人99大香蕉| 一区二区先锋深夜中文字幕| 欧美日韩国产激情另类| 国内精品偷拍一区二区三区| 日本岛国大片一区二区在线观看| 91午夜精品在线观看| 国产农村熟妇av国语对白| 大秀视频一区二区三区| 日韩精品一区三区二区| 不卡的国产在线视频| 日日躁夜夜躁狠狠躁欧美| 日韩欧美性生活免费观看| 禁止未满十八在线观看| 日韩亚洲欧美另类精品| 色婷婷亚洲一区二区三区| 99热只有这里才有精品| 少妇太爽高潮在线播放| 欧美一级特黄免费大片| 黄色资源网日韩三级一区二区| 欧美色精品人妻视频在线| 国产成人亚洲精品另类动态| 一区二区三区一级黄色| 日本国产精品久久一线| 日本人妻在线不卡视频| 日韩欧美第一页在线观看| 国产女片xb内射在线| 亚洲天堂福利视频网站| 精品久久亚洲一区二区欧美| 神马免费午夜福利剧场| 少妇互射视频免费视频| 国产精品三级竹菊影视| 一区二区中文字幕精品|