为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕田峪7331174 2021-05-31 10:50:45
在处理构造函数时,我注意到特权方法被写成函数表达式,前面有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 回答

?
MM们

TA贡献1886条经验 获得超2个赞

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


查看完整回答
反对 回复 2021-06-03
?
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 将打印“未定义”。


查看完整回答
反对 回复 2021-06-03
  • 2 回答
  • 0 关注
  • 136 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信