当搞乱构造函数时,我注意到特权方法被编写为函数表达式,前置this工作正常,而函数声明返回一个Type Error,其中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 回答
三国纷争
TA贡献1804条经验 获得超7个赞
这是一个关闭。 - Javascript具有词法作用域,构造函数作用域与其实例无关。您需要通过访问实例this
。您可以通过在构造函数中指定函数引用来存储它。this.setColor = setColor
慕娘9325324
TA贡献1783条经验 获得超4个赞
你不能试试这个:
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将打印“undefined”。
添加回答
举报
0/150
提交
取消