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

当搞乱构造函数时,我注意到特权方法被编写为函数表达式,前置this工作正常,而函数声明返回一个Type Error,其中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什么?是否提升/声明其作用域的范围是否与此有关


慕村9548890
浏览 521回答 2
2回答

三国纷争

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

慕娘9325324

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

相关分类

JavaScript