为什么必须使用函数表达式来定义构造函数内部的方法?

在处理构造函数时,我注意到特权方法被写成函数表达式,前面有this工作正常,而函数声明返回一个类型错误,其中function declaration is not a function.


我知道我们可以通过内部使用thisie从对象实例公开函数:this.functionName


var 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什么?提升/其声明的范围是函数表达式这一事实与此有关吗?


慕田峪7331174
浏览 137回答 2
2回答

MM们

这是一个关闭。- Javascript 有词法作用域,构造函数作用域与其实例无关。您需要通过this. 您可以通过在构造函数中分配函数引用来存储它。this.setColor = setColor

aluckdog

你不能试试这个: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 将打印“未定义”。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript