7

我在理解为什么以下内容不起作用时遇到了问题。我查看了其他建议的答案,但没有一个在新类对象的上下文中清楚地解决这个问题。

给定以下代码:

课堂示例1{构造函数(v1){this.v1=v1;}方法1(){console.log(“v1值=”,this.v1)}}const示例1=新示例1(“value1”);const alias1=example1.method1;示例1.method1();别名1();

当我打电话时别名1(),为什么是 未定义?

2

2个答案2

重置为默认值
5

这是因为调用别名1(method1)就像一个常规函数,而不是在对象上调用它。

当您在对象上调用它时是该对象吗?在您的情况下,上下文丢失了,或者未定义或者返回到全局对象的上下文(窗口在浏览器中)取决于严格模式

您可以为设置上下文在别名内使用绑定方法,或者您可以在其他对象中定义它,并使用该对象调用它。

课堂示例1{构造函数(v1){this.v1=v1;}方法1(){console.log(“v1值=”,this.v1)}}const示例1=新示例1(“value1”);示例1.method1();const别名=example1.method1;const alias1=别名绑定(示例1);别名1();常量示例2={v1:“foo”,别名}示例2.alias();

0

因为方法1它没有第1版,

你可以使用绑定在构造函数中:

Bind创建一个新函数,该函数将具有设置为传递给bind()的第一个参数。

课堂示例1{构造函数(v1){this.v1=v1;this.method1=this.meth1.bind(this);}方法1(){console.log(“v1值=”,this.v1)}}const示例1=新示例1(“value1”);const alias1=example1.method1;示例1.method1();别名1();

1
  • 谢谢您。对于我提出这个问题的用例,这是我首选的解决方案。
    – 三D鱼
    2019年9月30日19:06

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.