首页 > 解决方案 > 为什么必须使用函数表达式来定义构造函数内部的方法?

问题描述

在处理构造函数时,我注意到写成函数表达式的特权方法,前面加上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什么?提升/它声明的范围是函数表达式的事实与此有关吗?

标签: javascript

解决方案


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


推荐阅读