高級(jí)2發(fā)表

問(wèn)題1: apply少孝、call 璃搜、bind有什么作用携冤,什么區(qū)別

答案1:

apply()和call()函數(shù)都可以 指定this值和參數(shù)值的情況下調(diào)用某個(gè)函數(shù)肾胯。
call()和apply()的作用一樣,區(qū)別在于提供給原函數(shù)的參數(shù)的方式不一樣
apply()函數(shù)只接受兩個(gè)參數(shù)旬蟋,提供給原函數(shù)的參數(shù)以數(shù)組或類數(shù)組對(duì)象的形式存在
而call()接收無(wú)限個(gè)參數(shù)油昂, 第二個(gè)參數(shù)及其后面的參數(shù)就是提供給原函數(shù)的參數(shù)。

它們各自的定義:
apply:應(yīng)用一對(duì)象的一個(gè)方法倾贰,用另一個(gè)對(duì)象替換當(dāng)前對(duì)象冕碟。
call: 調(diào)用一對(duì)象的一個(gè)方法,用另一個(gè)對(duì)象替換當(dāng)前對(duì)象匆浙。

它們的共同之處:
都“可以用來(lái)代替另一個(gè)對(duì)象調(diào)用一個(gè)方法安寺,將一個(gè)函數(shù)的對(duì)象上下文從初始的上下文改變?yōu)橛?thisObj 指定的新對(duì)象。

它們的不同之處:
apply和call功能一樣首尼,只是傳入的參數(shù)列表形式不同:
如 func.call(func1,var1,var2,var3) 對(duì)應(yīng)的apply寫法為:func.apply(func1,[var1,var2,var3])
也就是說(shuō):call調(diào)用的為單個(gè)挑庶,apply調(diào)用的參數(shù)為數(shù)組

function sum(a,b){
  console.log(this === window);//true
  console.log(a + b);
}
sum(1,2);
sum.call(null,1,2);
sum.apply(null,[1,2]);

問(wèn)題2: 以下代碼輸出什么?

var john = { 
  firstName: "John" 
}
function func() { 
  alert(this.firstName + ": hi!")
}
john.sayHi = func
john.sayHi()   //  彈出John:hi!

問(wèn)題3: 下面代碼輸出什么软能,為什么

func() 
function func() { 
  alert(this)
} 

//彈出 [object Window] 由于func是在全局作用域下被調(diào)用

問(wèn)題4:下面代碼輸出什么

document.addEventListener('click', function(e){
    console.log(this);
    setTimeout(function(){
        console.log(this);
    }, 200);
}, false);

//document
//window因?yàn)閟etTimerout也是一個(gè)函數(shù)調(diào)用迎捺。

問(wèn)題5:下面代碼輸出什么,why

var john = { 
  firstName: "John" 
}

function func() { 
  alert( this.firstName )
}
func.call(john)

//彈出John查排,因?yàn)槭褂胏all()傳入的第一個(gè)參數(shù)是this的指針凳枝,可以看見調(diào)用func的時(shí)候改變了this的指向,指向的是john

問(wèn)題6: 以下代碼有什么問(wèn)題跋核,如何修改

var module= {
  bind: function(){
    $btn.on('click', function(){
      console.log(this) //this指向$btn
      this.showMsg();//問(wèn)題出在這里$btn沒有showMsg這個(gè)方法岖瑰。所以應(yīng)該放moudule調(diào)用這個(gè)方法
    })
  },
  
  showMsg: function(){
    console.log('饑人谷');
  }
}

修改后
var module= {
  bind: function(){
    var _this=this
    $btn.on('click', function(){
      console.log(this) //this指什么
      _this.showMsg();
    })
  },
  
  showMsg: function(){
    console.log('饑人谷');
  }
}

原型鏈相關(guān)問(wèn)題

問(wèn)題7:有如下代碼,解釋

Person砂代、 prototype蹋订、__proto__、p刻伊、constructor

之間的關(guān)聯(lián)露戒。

function Person(name){
    this.name = name;
}
Person.prototype.sayName = function(){
    console.log('My name is :' + this.name);
}
var p = new Person("若愚")
p.sayName();
即p是Person的一個(gè)實(shí)例难礼,
p的__proto__指向Person的prototype,
Person的prototype的__proto__指向?qū)ο蟮膒rototype玫锋,這里到達(dá)頂級(jí),
另外constructor即構(gòu)造函數(shù)person本身讼呢。
p._proto=Person.prototype;
p.constructor=Person;
Peroson.prototype.constructor=Person

問(wèn)題8: 上例中撩鹿,對(duì)對(duì)象 p可以這樣調(diào)用 p.toString()。toString是哪里來(lái)的? 畫出原型圖?并解釋什么是原型鏈悦屏。

Paste_Image.png

javaScript中的對(duì)象有指向其原型對(duì)象的內(nèi)部鏈接节沦,而原型對(duì)象又有自己的原型知道對(duì)象的原型為null。這種一級(jí)一級(jí)的鏈結(jié)構(gòu)就稱為原型鏈(prototype chain)础爬。上述例子的原型鏈如下:p-->p.__ proto__-->Person,prototype:Person.prototype.__ proto__--->Object.prototype:Object.prototype.__ proto__=null甫贯。

問(wèn)題9:對(duì)String做擴(kuò)展,實(shí)現(xiàn)如下方式獲取字符串中頻率最高的字符

var str = 'ahbbccdeddddfg';
var ch = str.getMostOften();
console.log(ch); //d , 因?yàn)閐 出現(xiàn)了5次

問(wèn)題10: instanceOf有什么作用看蚜??jī)?nèi)部邏輯是如何實(shí)現(xiàn)的叫搁?

instanceof 是一個(gè)運(yùn)算符。A instancrof B用于判斷A 是否是B 的一個(gè)實(shí)例供炎,或者是A是否是以B為父類型的一個(gè)實(shí)例渴逻。
在上面類Person創(chuàng)建實(shí)例p的這個(gè)例子中:

 p instanceof Person  //true
 Person instanceof Object  //true
 p instanceof Object   //true

instanceof 運(yùn)算符用來(lái)測(cè)試一個(gè)對(duì)象在其原型鏈中是否存在一個(gè)構(gòu)造函數(shù)的 prototype 屬性。
instanceOf:判斷一個(gè)對(duì)象是否為另一個(gè)對(duì)象的實(shí)例
其內(nèi)部邏輯是測(cè)試一個(gè)對(duì)象在其原型鏈中是否存在一個(gè)構(gòu)造函數(shù)的 prototype 屬性音诫。
所以如果表達(dá)式obj instanceof Foo 返回true惨奕,則并不意味著該表達(dá)式會(huì)永遠(yuǎn)返回true,因?yàn)镕oo.prototype屬性的值有可能會(huì)改變竭钝,改變之后的值很有可能不存在于obj的原型鏈上梨撞,這時(shí)原表達(dá)式的值就會(huì)成為false。

繼承相關(guān)問(wèn)題

問(wèn)題11:繼承有什么作用?

概念:繼承是指一個(gè)對(duì)象直接使用另一個(gè)對(duì)象的屬性和方法香罐。
作用:繼承劃分了類的層次性卧波,父類代表的是更一般、更泛化的類穴吹,而子類則是更為具體幽勒、更為細(xì)化;繼承是實(shí)現(xiàn)代碼重用港令、擴(kuò)展軟件功能的重要手段啥容,子類中與父類完全相同的屬性和方法不必重寫,只需寫出新增或改寫的內(nèi)容顷霹,這就是說(shuō)子類可以復(fù)用父類的內(nèi)容咪惠,不必一切從零開始。
繼承可以使子類共享父類的屬性和方法淋淀;
繼承可以覆蓋和擴(kuò)展父類的屬性和方法遥昧。

問(wèn)題12: 下面兩種寫法有什么區(qū)別?

//方法1
function People(name, sex){
    this.name = name;
    this.sex = sex;
    this.printName = function(){
        console.log(this.name);
    }
}
var p1 = new People('饑人谷', 2)
//方法2
function Person(name, sex){
    this.name = name;
    this.sex = sex;
}

Person.prototype.printName = function(){
    console.log(this.name);
}
var p1 = new Person('若愚', 27);

區(qū)別:方法1的printName方法是在函數(shù)Person實(shí)例對(duì)象里的,方法2是在Person的prototype對(duì)象上的。
當(dāng)再創(chuàng)建一個(gè)Person實(shí)例對(duì)象的時(shí)候炭臭,方法1又將會(huì)再創(chuàng)建一個(gè)printName方法永脓,占用新的內(nèi)存,而方法2將一個(gè)公用的printName方法寫在原型上鞋仍,當(dāng)對(duì)象要使用該方法只需到原型鏈里調(diào)用就可以了常摧,達(dá)到節(jié)省內(nèi)存的效果。

問(wèn)題13: Object.create 有什么作用威创?兼容性如何落午?

Object.create方法可以創(chuàng)建一個(gè)擁有指定原型和若干個(gè)指定屬性的對(duì)象。
在繼承中肚豺,Object.create可以用于繼承屬性溃斋。
Object.create是在ES5中規(guī)定的,其兼容性見下圖:

Paste_Image.png

問(wèn)題14: hasOwnProperty有什么作用吸申? 如何使用梗劫?

作用:判斷一個(gè)對(duì)象是否包含自定義屬性而不是原型鏈上的屬性,是JavaScript中唯一一個(gè)處理屬性但是不查找原型鏈的函數(shù).
hasOwnProperty方法會(huì)返回一個(gè)布爾值呛谜,其用來(lái)判斷某個(gè)對(duì)象是否含有特定的自身屬性在跳,該方法會(huì)忽略掉那些從原型鏈上繼承到的屬性。
語(yǔ)法為obj.hasOwnProperty(prop)隐岛,參數(shù)prop為要檢測(cè)的屬性
自身屬性與繼承屬性

下面的例子演示了 hasOwnProperty 方法對(duì)待自身屬性和繼承屬性的區(qū)別:

o = new Object();
o.prop = 'exists';
o.hasOwnProperty('prop');             // 返回 true
o.hasOwnProperty('toString');         // 返回 false
o.hasOwnProperty('hasOwnProperty');   // 返回 false

問(wèn)題15:如下代碼中call的作用是什么?

function Person(name, sex){
    this.name = name;
    this.sex = sex;
}
function Male(name, sex, age){
    Person.call(this, name, sex);    //這里的 call 有什么作用
    this.age = age;
}

這里的call的作用是改變構(gòu)造函數(shù)People的作用域猫妙,這樣就可以讓People在Male的作用域中執(zhí)行,這樣People中的一些屬性賦值語(yǔ)句也會(huì)在Male中執(zhí)行聚凹。
通過(guò)這種方式就實(shí)現(xiàn)了屬性的繼承割坠。
call()方法可以將傳入的第一個(gè)參數(shù)設(shè)置為this對(duì)象。代碼中在Male這個(gè)類下面執(zhí)行另一個(gè)類Person可以把Person的屬性 賦值到Male上妒牙,但是需要在執(zhí)行的時(shí)候通過(guò)call來(lái)把環(huán)境改到自己的作用域下彼哼。

問(wèn)題16: 補(bǔ)全代碼,實(shí)現(xiàn)繼承

function Person(name, sex){
    // todo ...
}

Person.prototype.getName = function(){
    // todo ...
};    

function Male(name, sex, age){
   //todo ...
}

//todo ...
Male.prototype.getAge = function(){
    //todo ...
};

var ruoyu = new Male('若愚', '男', 27);
ruoyu.printName();
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末湘今,一起剝皮案震驚了整個(gè)濱河市敢朱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌摩瞎,老刑警劉巖拴签,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異旗们,居然都是意外死亡蚓哩,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門上渴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)岸梨,“玉大人喜颁,你說(shuō)我怎么就攤上這事〔芾” “怎么了半开?”我有些...
    開封第一講書人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)赃份。 經(jīng)常有香客問(wèn)我稿茉,道長(zhǎng),這世上最難降的妖魔是什么芥炭? 我笑而不...
    開封第一講書人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮恃慧,結(jié)果婚禮上园蝠,老公的妹妹穿的比我還像新娘。我一直安慰自己痢士,他們只是感情好彪薛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著怠蹂,像睡著了一般善延。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上城侧,一...
    開封第一講書人閱讀 51,198評(píng)論 1 299
  • 那天易遣,我揣著相機(jī)與錄音,去河邊找鬼嫌佑。 笑死豆茫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的屋摇。 我是一名探鬼主播揩魂,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼炮温!你這毒婦竟也來(lái)了火脉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤柒啤,失蹤者是張志新(化名)和其女友劉穎倦挂,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體白修,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡妒峦,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了兵睛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肯骇。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡窥浪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出笛丙,到底是詐尸還是另有隱情漾脂,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布胚鸯,位于F島的核電站骨稿,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏姜钳。R本人自食惡果不足惜坦冠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望哥桥。 院中可真熱鬧辙浑,春花似錦、人聲如沸拟糕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)送滞。三九已至侠草,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間犁嗅,已是汗流浹背边涕。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留褂微,地道東北人奥吩。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蕊梧,于是被迫代替她去往敵國(guó)和親霞赫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容