在处理构造函数时,我注意到特权方法被写成函数表达式,前面有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 回答
![?](http://img1.sycdn.imooc.com/545869470001a00302200220-100-100.jpg)
MM们
TA贡献1886条经验 获得超2个赞
这是一个关闭。- Javascript 有词法作用域,构造函数作用域与其实例无关。您需要通过this
. 您可以通过在构造函数中分配函数引用来存储它。this.setColor = setColor
![?](http://img1.sycdn.imooc.com/533e51f30001edf702000200-100-100.jpg)
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
提交
取消