javascript - 为什么必须使用函数表达式来定义构造函数内部的方法?
问题描述
在处理构造函数时,我注意到写成函数表达式的特权方法,前面加上this
工作正常,而函数声明返回一个类型错误,其中function declaration is not a function
.
我知道我们可以通过在内部使用this
ie 来从对象实例中公开函数: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 具有词法作用域,构造函数作用域与其实例无关。您需要通过 访问实例this
。您可以通过在构造函数中分配函数引用来存储它。this.setColor = setColor
推荐阅读
- android - Android webview层类型闪烁和滚动问题
- jquery - 如何在 div 中搜索特定颜色的元素?
- c# - 如何在同一台机器和同一应用程序池中的 ASP.NET Web 应用程序之间共享会话?
- docker - 错误:“./docker-compose.yml”中的版本不受支持
- c# - AT+CMGL="ALL" 只返回 OK
- python - 获取 AttributeError:“DataFrame”对象没有属性“shape”
- c - 是否有任何解决方案通过代码打开/关闭平板电脑模式?
- rust - 通用生命周期是作为引用的生命周期还是被引用值的生命周期实现?
- reactjs - 读取 package.json 文件中的环境变量
- reactjs - 如何动态获取和保存状态附近的日期?