慕田峪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

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 將打印“未定義”。
添加回答
舉報
0/150
提交
取消