亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么必須使用函數表達式來定義構造函數內部的方法?

為什么必須使用函數表達式來定義構造函數內部的方法?

慕田峪7331174 2021-05-31 10:50:45
在處理構造函數時,我注意到特權方法被寫成函數表達式,前面有this工作正常,而函數聲明返回一個類型錯誤,其中function declaration is not a function.我知道我們可以通過內部使用thisie從對象實例公開函數:this.functionNamevar Foo = function(){    var _color= "blue";    this.getColor = function(){            return _color;    }    function setColor(newColor){       this._color = newColor;        }}var bar = new Foo();console.log(bar.setColor('red'));關于function setColor導致日志輸出的函數聲明在幕后發生了Uncaught TypeError: bar.setColor is not a function什么?提升/其聲明的范圍是函數表達式這一事實與此有關嗎?
查看完整描述

2 回答

?
MM們

TA貢獻1886條經驗 獲得超2個贊

這是一個關閉。- Javascript 有詞法作用域,構造函數作用域與其實例無關。您需要通過this. 您可以通過在構造函數中分配函數引用來存儲它。this.setColor = setColor


查看完整回答
反對 回復 2021-06-03
?
aluckdog

TA貢獻1847條經驗 獲得超7個贊

你不能試試這個:


var Foo = function(){

    var _color= "blue";

    this.getColor = function(){

            return _color;

    }

    this.setColor = function(newColor){

       this._color = newColor; 

       return this._color;

    }

}

var bar = new Foo();

console.log(bar.setColor('red'));

發生的事情是函數聲明“ function setColor(newColor) ”只是一個表達式,包含在其父函數“ function() ”的范圍內。這意味著如果您沒有將“ setColor ”函數設置/分配給來自父對象(Foo)的任何屬性,那么它在外部(上)范圍內不可用。此外,您必須返回“ this._color ”的值,否則 console.log 將打印“未定義”。


查看完整回答
反對 回復 2021-06-03
  • 2 回答
  • 0 關注
  • 165 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號