javascript中的new

來源:互聯網
上載者:User

javascript是基於原型(Prototype based)的物件導向的語言,這點不同於我們熟悉的.NET,Java語言,是基於類模式(Class based)。

所以javascript中沒有類的概念。理解這一點很重要,很多javascript教程為了讓讀者更容易理解,會套用他們常用的類模式中的概念,這 樣反而讓大家產生歧義。

先進段代碼,

function employee(){
this.name="";
this.dept="";
}
employee.prototype={
say:'hello'
}
var p = new employee();

這段代碼,我們會經常用到,其中new關鍵字最容易引起混淆的一處。這裡的new和.NET中的所做的工作不同。

我們可以這樣理解javascript中用new操作建立執行個體的過程,new關鍵字以employee()為模板建立了一個新的對象,它複製了employee構造器中的成員變數(也可以理解為,將p對象作為參數傳入建構函式中,並且應用函數中所有this的成員變數),同時繼承了構造器的原型。

我們用代碼類比new的過程。

//var p = new Object() is also correct.
var p ={};
employee.apply(p);
p.__proto__ = employee.prototype;

__proto__ 是 javascript對象執行個體一個內部屬性,它指向建構函式即employee的prototype屬性,當對象尋找某一成員變數時,例如p.say,首先尋找自己的成員屬性,如果找到了,傳回值,如果沒找到,就去調用__proto__來檢查原型鏈,當前例子,也就是在employee.prototype中找到say成員。

 

 

原文地址:http://www.cnblogs.com/leo-penguin/archive/2010/03/20/1689048.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.