第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

為什么在使用諾言時(shí)在類方法中未定義“ this”?

為什么在使用諾言時(shí)在類方法中未定義“ this”?

Smart貓小萌 2019-12-26 11:14:14
我有一個(gè)javascript類,每個(gè)方法都返回一個(gè)QPromise。我想知道為什么this在method2和中未定義method3。有沒有更正確的方法來編寫此代碼?function MyClass(opts){  this.options = opts;  return this.method1()    .then(this.method2)    .then(this.method3);}MyClass.prototype.method1 = function(){  // ...q stuff...  console.log(this.options); // logs "opts" object  return deferred.promise;};MyClass.prototype.method2 = function(method1resolve){  // ...q stuff...  console.log(this); // logs undefined  return deferred.promise;};MyClass.prototype.method3 = function(method2resolve){  // ...q stuff...  console.log(this); // logs undefined  return deferred.promise;};我可以使用解決此問題bind:function MyClass(opts){  this.options = opts;  return this.method1()    .then(this.method2.bind(this))    .then(this.method3.bind(this));}但是不能完全確定為什么bind有必要。正在.then()消滅this?
查看完整描述

3 回答

?
慕斯709654

TA貢獻(xiàn)1840條經(jīng)驗(yàn) 獲得超5個(gè)贊

this始終是調(diào)用方法的對(duì)象。但是,將方法傳遞給時(shí)then(),您不會(huì)調(diào)用它!該方法將存儲(chǔ)在某個(gè)位置,稍后再從那里調(diào)用。如果要保存this,則必須這樣做:


.then(() => this.method2())

或者,如果您必須在ES6之前的版本中執(zhí)行此操作,則需要保留以下內(nèi)容this:


var that = this;

// ...

.then(function() { that.method2() })


查看完整回答
反對(duì) 回復(fù) 2019-12-26
?
神不在的星期二

TA貢獻(xiàn)1963條經(jīng)驗(yàn) 獲得超6個(gè)贊

window默認(rèn)情況下,在全局對(duì)象()的上下文中調(diào)用Promise處理程序。在嚴(yán)格模式(use strict;)中,上下文為undefined。這就是method2和發(fā)生的事情method3。


;(function(){

  'use strict'

  Promise.resolve('foo').then(function(){console.log(this)}); // undefined

}());


;(function(){

  Promise.resolve('foo').then(function(){console.log(this)}); // window

}());

因?yàn)閙ethod1,您打電話method1為this.method1()。這種調(diào)用方式在this您的實(shí)例對(duì)象的上下文中調(diào)用它。這就是為什么內(nèi)部上下文method1是實(shí)例的原因。


查看完整回答
反對(duì) 回復(fù) 2019-12-26
?
幕布斯7119047

TA貢獻(xiàn)1794條經(jīng)驗(yàn) 獲得超8個(gè)贊

基本上,您要向其傳遞沒有上下文引用的函數(shù)引用??梢酝ㄟ^this幾種方式確定上下文:

  1. 隱含地。調(diào)用全局函數(shù)或沒有綁定的函數(shù)會(huì)假定全局上下文。*

  2. 直接參考。如果您致電,myObj.f()myObj將是this上下文。**

  3. 手動(dòng)裝訂。這是您的函數(shù)類,例如.bind.apply。這些您明確聲明了this上下文。這些總是優(yōu)先于前兩個(gè)。

在您的示例中,您正在傳遞一個(gè)函數(shù)引用,因此在調(diào)用它時(shí),它暗示是全局函數(shù)或沒有上下文的函數(shù)。使用.bind通過在this顯式設(shè)置的位置創(chuàng)建新函數(shù)來解決此問題。

*僅在非嚴(yán)格模式下如此。在嚴(yán)格模式下,this設(shè)置為undefined。

**假設(shè)您使用的功能尚未手動(dòng)綁定。


查看完整回答
反對(duì) 回復(fù) 2019-12-26
  • 3 回答
  • 0 關(guān)注
  • 687 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)