成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

【翻譯】javascript中的prototype

lentrue / 1205人閱讀

摘要:構(gòu)造函數(shù)就是一個(gè)具有屬性的方法,該屬性被稱作標(biāo)識(shí)具有一個(gè)屬性,但是沒有用戶定義它。然而,構(gòu)造函數(shù)的屬性可以被改變,并且將影響用這個(gè)原型創(chuàng)建的對(duì)象。

原文地址:http://dailyjs.com/2012/05/20/js101-prototype/

在花費(fèi)了很多年研究面向?qū)ο缶幊讨?,想在javascript使用是令人失望的。主要是從根源上缺少一個(gè)class這樣的關(guān)鍵詞。然而,javascript的設(shè)計(jì)不會(huì)成為阻礙 -- 精通它基于原型的繼承,將會(huì)加深你對(duì)該語言的理解。

首先我們需要弄清楚面向?qū)ο笈c面向類編程的區(qū)別。Javascript提供了我們需要的工具來完成大多數(shù)語言的類可以做的事情 -- 我們只需要學(xué)習(xí)如何正確使用它。

我們簡單的看一下prototype屬性,看它如何深化我們對(duì)javascript的了解。

prototype屬性(The prototype Property)

prototype屬性是一個(gè)內(nèi)部屬性,它被用于實(shí)現(xiàn)繼承。我們這里的“繼承”是一種特定的繼承形式。因?yàn)闋顟B(tài)和方法都由對(duì)象承載,所以我們可以說結(jié)構(gòu)、行為和狀態(tài)都是繼承的。這與基于類的語言形成對(duì)比,其狀態(tài)由實(shí)例承載,而方法由類承載。

構(gòu)造函數(shù)就是一個(gè)具有屬性的方法,該屬性被稱作prototype:

function Animal() {
    
}
console.log(Animal.prototype);

{}標(biāo)識(shí)Animal具有一個(gè)prototype屬性,但是沒有用戶定義它。我們可以隨意添加值和方法:

function Animal() {  
}

Animal.prototype.type = "Unknown";  
Animal.prototype.weight = 0;  
Animal.prototype.weightUnits = "kg";

Animal.prototype.toString = function() {  
  return this.type + ", " + this.weight + this.weightUnits;
};

var molly = new Animal();  
molly.type = "Dog";  
molly.weight = 28;

console.log(molly.toString());  // Dog, 28kg

這將會(huì)輸出"Dog, 28kg"。我們可以使用對(duì)象字面量將這些賦值分組:

function Animal() {  
}

Animal.prototype = {  
  type: "Unknown",
  weight: 0,
  weightUnits: "kg",

  toString: function() {
    return this.type + ", " + this.weight + this.weightUnits;
  }
};

這樣就和你熟悉的類的方式差異不是很大。

動(dòng)態(tài)原型(Dynamic Prototypes)

通過指定值可以給對(duì)象動(dòng)態(tài)的添加屬性。

var molly = new Animal()  
  , harley = new Animal();

molly.type = "Dog";  
molly.weight = 28;

harley.type = "Dog";  
harley.weight = 38;  
harley.name = "Harley";

console.log(molly);  
console.log(harley);

// { type: "Dog", weight: 28 }
// { type: "Dog", weight: 38, name: "Harley" }

在這里添加name屬性只影響了實(shí)例。然而,構(gòu)造函數(shù)的屬性可以被改變,并且將影響用這個(gè)原型創(chuàng)建的對(duì)象。

Animal.prototype.weightUnits = "oz";

console.log(molly.toString())  
// Now displays "Dog, 28oz"

這就是為什么人們只會(huì)擴(kuò)展自己的庫而不去改變內(nèi)置原型,或者說只有這么做才是安全的。我們完全有可能改變對(duì)象,例如使用String的內(nèi)置方法做一些不安全的事情:

String.prototype.match = function() {  
  return true;
};

console.log("alex".match(/1234/)); 

輸出為true,所以現(xiàn)在我成功的破壞了很多程序都在依賴的基礎(chǔ)方法。
改變內(nèi)置原型也不一定全部是壞的;我們使用它有用的東西,如修補(bǔ)支持更舊版本的ECMAScript在舊版的瀏覽器。

如果我們替換prototype屬性會(huì)發(fā)生什么?

var molly = new Animal()  
  , harley;

molly.type = "Dog";  
molly.weight = 28;

Animal.prototype = {  
  toString: function() {
    return "...";
  }
};

harley = new Animal;  
harley.type = "Dog";  
harley.weight = 38;

console.log(molly.toString());  
console.log(harley.toString());

// Dog, 28kg
// ...

盡管事實(shí)上改變原型會(huì)影響所有實(shí)例,但是完全替換構(gòu)造函數(shù)的原型不會(huì)影響舊實(shí)例。為什么?實(shí)例具有對(duì)原型的引用,而不是離散拷貝。想象它就是這樣:使用new關(guān)鍵字創(chuàng)建的每個(gè)實(shí)例都鏈接到原始原型。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/91359.html

相關(guān)文章

  • Javascript中的的對(duì)象——原型模式(Prototype)

    摘要:使用原型模式添加方法和屬性在前面的章節(jié)中,已經(jīng)學(xué)習(xí)過了如何定義一個(gè)構(gòu)建新對(duì)象時(shí)使用的構(gòu)造函數(shù)。向構(gòu)造函數(shù)的中添加方法和屬性是在對(duì)象被創(chuàng)建的時(shí)候?yàn)閷?duì)象添加功能的另一種方式。讓我們繼續(xù)使用對(duì)象作為構(gòu)造函數(shù)的原型屬性。 本文原文來源:《Object-Oriented JavaScript》By Stoyan Stefanov本文翻譯來源:赤石俊哉 原創(chuàng)翻譯版權(quán)申明: 如果您是原文的原作者并且...

    岳光 評(píng)論0 收藏0
  • JavaScript中的this陷阱的最全收集--沒有之一

    摘要:提及的精髓,閉包作用域鏈函數(shù)是當(dāng)之無愧的。博客的標(biāo)題是中的陷阱的最全收集沒有之一,很顯然這篇博客闡述的是。這是造成很多不熟悉的人深陷陷阱的根源。你應(yīng)該避免在構(gòu)造函數(shù)里面返回任何東西,因?yàn)檫@可能代 當(dāng)有人問起你JavaScript有什么特點(diǎn)的時(shí)候,你可能立馬就想到了單線程、事件驅(qū)動(dòng)、面向?qū)ο蟮纫欢言~語,但是如果真的讓你解釋一下這些概念,可能真解釋不清楚。有句話這么說:如果你不能向一個(gè)6歲...

    KitorinZero 評(píng)論0 收藏0
  • 30秒就能理解的 Javascript 代碼片段 --- Array篇

    摘要:而這個(gè)秒就能理解的代碼片段,摒棄了許多不必要的代碼,只實(shí)現(xiàn)了最核心的部分,不像和那樣,考慮參數(shù)邊界值問題,例如,參數(shù)的類型是否符合預(yù)期等。使用根據(jù)斷言函數(shù)對(duì)數(shù)組進(jìn)行過濾,返回條件為真值的對(duì)象。 之前翻譯過一篇文章,《我喜歡的5個(gè)編程技巧》,里面的一個(gè)技巧是借鑒一個(gè)網(wǎng)站的代碼片段,好奇的小手點(diǎn)下鏈接后,發(fā)現(xiàn)是一個(gè)有 47000 多star的倉庫,30-seconds-of-code。 倉...

    fox_soyoung 評(píng)論0 收藏0
  • 45個(gè)實(shí)用的JavaScript小貼士、小技巧和最佳實(shí)踐

    摘要:翻譯正文第一次聲明變量時(shí),請(qǐng)不要忘記使用關(guān)鍵字聲明使用代替空字符串轉(zhuǎn)成布爾值都為每行代碼的末尾最好都加上個(gè)分號(hào)最好給對(duì)象都添加上構(gòu)造函數(shù)在使用和盡量小心。 翻譯介紹 翻譯標(biāo)題:45 Useful JavaScript Tips, Tricks and Best Practices 翻譯來源:http://modernweb.com/2013/12/23/45-useful-java...

    Moxmi 評(píng)論0 收藏0
  • 翻譯Javascript最佳搭檔:強(qiáng)大的join與split

    摘要:不幸的是,這種方法在中失效,因?yàn)樗麄儚闹绣e(cuò)誤的去掉了第一個(gè)空成員。假設(shè)競走的比賽結(jié)果需要保存到數(shù)組中。目的就是將競賽者與他們的記錄時(shí)間交替的放在數(shù)組中。結(jié)論我希望我列出的這幾條應(yīng)用足以說明與是最佳搭檔。 原文地址:http://javascriptweblog.wordpress.com/2010/11/08/javascripts-dream-team-in-praise-of-sp...

    IntMain 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<