国产chinesehdxxxx野外,国产av无码专区亚洲av琪琪,播放男人添女人下边视频,成人国产精品一区二区免费看,chinese丰满人妻videos

(3)——prototype原型

2018-02-24 15:44 更新

既typeof之后的另一位老朋友!

prototype也是我們的老朋友,即使不了解的人,也應該都聽過它的大名。如果它還是您的新朋友,我估計您也是javascript的新朋友。

在咱們的第一節(jié)(深入理解javascript原型和閉包(1)——一切都是對象)中說道,函數(shù)也是一種對象。他也是屬性的集合,你也可以對函數(shù)進行自定義屬性。

不用等咱們?nèi)ピ囼灒琷avascript自己就先做了表率,人家就默認的給函數(shù)一個屬性——prototype。對,每個函數(shù)都有一個屬性叫做prototype。

這個prototype的屬性值是一個對象(屬性的集合,再次強調(diào)!),默認的只有一個叫做constructor的屬性,指向這個函數(shù)本身。

如上圖,SuperType是是一個函數(shù),右側(cè)的方框就是它的原型。

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

咦,有些方法怎么似曾相似?

對!別著急,之后會讓你知道他們?yōu)楹嗡圃嘧R。

接著往下說,你也可以在自己自定義的方法的prototype中新增自己的屬性

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

看到?jīng)]有,這樣就變成了

沒問題!

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

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

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

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());

即,F(xiàn)n是一個函數(shù),fn對象是從Fn函數(shù)new出來的,這樣fn對象就可以調(diào)用Fn.prototype中的屬性。

因為每個對象都有一個隱藏的屬性——“proto”,這個屬性引用了創(chuàng)建這個對象的函數(shù)的prototype。即:fn.proto === Fn.prototype

這里的"proto"成為“隱式原型”,下回繼續(xù)分解。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號