日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

深入理解javascript原型和闭包(3)——prototype原型

發布時間:2024/9/16 javascript 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深入理解javascript原型和闭包(3)——prototype原型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

既typeof之后的另一位老朋友!
prototype也是我們的老朋友,即使不了解的人,也應該都聽過它的大名。如果它還是您的新朋友,我估計您也是javascript的新朋友。
在咱們的第一節(深入理解javascript原型和閉包(1)——一切都是對象)中說道,函數也是一種對象。他也是屬性的集合,你也可以對函數進行自定義屬性。
不用等咱們去試驗,javascript自己就先做了表率,人家就默認的給函數一個屬性——prototype。對,每個函數都有一個屬性叫做prototype。
這個prototype的屬性值是一個對象(屬性的集合,再次強調!),默認的只有一個叫做constructor的屬性,指向這個函數本身。

如上圖,SuperType是是一個函數,右側的方框就是它的原型。
原型既然作為對象,屬性的集合,不可能就只弄個constructor來玩玩,肯定可以自定義的增加許多屬性。例如這位Object大哥,人家的prototype里面,就有好幾個其他屬性。

咦,有些方法怎么似曾相似?
對!別著急,之后會讓你知道他們為何似曾相識。
接著往下說,你也可以在自己自定義的方法的prototype中新增自己的屬性。

function Fn() { }Fn.prototype.name = '王福朋';Fn.prototype.getYear = function () {return 1988; };

看到沒有,這樣就變成了:

沒問題!
但是,這樣做有何用呢? —— 解決這個問題,咱們還是先說說jQuery吧。

var $div = $('div'); $div.attr('myName', '王福朋');

以上代碼中,$('div')返回的是一個對象,對象——被函數創建的。假設創建這一對象的函數是 myjQuery。它其實是這樣實現的。

myjQuery.prototype.attr = function () {//……};$('div') = new myjQuery();

不知道大家有沒有看明白。
如果用咱們自己的代碼來演示,就是這樣

function Fn() { } Fn.prototype.name = '王福朋'; Fn.prototype.getYear = function () {return 1988; }; var fn = new Fn(); console.log(fn.name); console.log(fn.getYear());

即,Fn是一個函數,fn對象是從Fn函數new出來的,這樣fn對象就可以調用Fn.prototype中的屬性。
因為每個對象都有一個隱藏的屬性——“__proto__”,這個屬性引用了創建這個對象的函數的prototype。即:fn.__proto__ === Fn.prototype
這里的"__proto__"成為“隱式原型”,下回繼續分解。

總結

以上是生活随笔為你收集整理的深入理解javascript原型和闭包(3)——prototype原型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。