javascript
JS函数浅析之constructor、prototype属性
??? 1、定義式
??? function a() {}
??? 2、聲明式
??? var a = function() {}; // 把一個匿名函數(shù)賦給一個變量
??? 3、構(gòu)造函數(shù)
??? var a = new Function(); // 用Function來實例化一個對象
??? 函數(shù)有什么用呢?封裝,重用,對吧,把一些動作封裝起來,讓其他童鞋可以重復調(diào)用【使用()操作符即可】。
??? 函數(shù)按照功能分,可以分為:
??? 1、普通函數(shù);
??? ??? 普通函數(shù)就是一般方法的封裝跟重用,如上面的a;
??? 2、構(gòu)造函數(shù);
??? ??? 構(gòu)造函數(shù)用來實例化一個對象,像是一道菜譜,按照這個菜譜炒了一盤菜;定義構(gòu)造函數(shù),有個不成文的規(guī)定,就是函數(shù)名大寫,如:var A = function() {};
??? 3、對象方法;
??? ??? 用來定義一個對象的方法,比如一個Person對象var Person = {};需要定義一個getName方法,如:Person.getName = function() {};
??? 函數(shù)之constructor
??? 每個函數(shù)都有一個constructor屬性,這個屬性指向創(chuàng)建自己的函數(shù);如上文中的a函數(shù),他的constructor指向誰呢?誰創(chuàng)建它指向誰唄? 那是誰創(chuàng)建的呢?在firebug等控制臺上輸入a.constructor,顯示Function()。為什么是Function呢?其實,無論用上面 的哪種形式創(chuàng)建函數(shù),在后臺都會使用new Function()形式創(chuàng)建。那Function的constructor指向誰呢?很意外,還是Function?為什么?由于Function是 ECMAScript規(guī)定的本地對象,獨立于宿主環(huán)境,這說明只要打開宿主環(huán)境(如:瀏覽器)這個Function就可以用了。
??? 函數(shù)之prototype
??? 跟constructor一樣,prototype也是每個函數(shù)默認就具有的屬性,這個屬性指向prototype對象,而prototype里面居然也有一個constructor屬性,指向了這個函數(shù)。
??? 構(gòu)造函數(shù)
??? 構(gòu)造函數(shù)可以實例化一個對象:如:var Person = function() {}; var p = new Person(); 這個p就是通過Person創(chuàng)建的,那么它的constrctor指向了Person,而其內(nèi)部還有個__proto__屬性,在firefox、 chrome等瀏覽器下可以直接訪問這個屬性,這個屬性指向了prototype對象。
??? 實例、原型、構(gòu)造函數(shù) 之間的關(guān)系
??? 實例是通過構(gòu)造函數(shù)創(chuàng)建,但是跟構(gòu)造函數(shù)沒有直接關(guān)系,其內(nèi)部的__proto__屬性指向了prototype,而prototype(原型)的 constructor指向了構(gòu)造函數(shù),構(gòu)造函數(shù)的prototype屬性指向了原型(prototype),所以說實例跟構(gòu)造函數(shù)都是通過 prototype發(fā)生了關(guān)系。。。。
?
轉(zhuǎn)載:
http://my.oschina.net/shangshi/blog/31932總結(jié)
以上是生活随笔為你收集整理的JS函数浅析之constructor、prototype属性的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 列出本机正在监控的端口
- 下一篇: 如何复制百度文库中的文章