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

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

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

慕村9548890 2019-04-17 18:15:24
当搞乱构造函数时,我注意到特权方法被编写为函数表达式,前置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


查看完整回答
反对 回复 2019-05-17
?
慕娘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”。


查看完整回答
反对 回复 2019-05-17
  • 2 回答
  • 0 关注
  • 520 浏览
慕课专栏
更多

添加回答

举报

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