Javascript “无法访问”;这";散落物内
我很难理解如何访问位于我创建的对象文本的一个方法中的Javascript “无法访问”;这";散落物内,javascript,object,this,object-literal,Javascript,Object,This,Object Literal,我很难理解如何访问位于我创建的对象文本的一个方法中的这个 以下是一个例子: var app = { click: function(e) { e.preventDefault(); console.log('Clicked'); this.saywhat(); }, saywhat: function() { console.log('Say what ?'); } }; var link = document.querySelector(
这个
以下是一个例子:
var app = {
click: function(e) {
e.preventDefault();
console.log('Clicked');
this.saywhat();
},
saywhat: function() {
console.log('Say what ?');
}
};
var link = document.querySelector('a');
link.addEventListener('click', app.click);
如果单击该链接,我会得到以下错误:uncaughttypeerror:this.saywhat not a function
。如何使saywhat()
从内部click()
可用?(我想找到一个解决方案,在那里我不会被迫使用app.saywhat()
)使用
使用
这是因为事件处理程序中的是事件注册的元素,即链接
在您的情况下,您可以使用app.saywhat()
,也可以使用显式指定作为this
使用的内容。就是
link.addEventListener('click', app.click.bind(app));
这是因为事件处理程序中的此
是事件注册的元素,即链接
在您的情况下,您可以使用app.saywhat()
,也可以使用显式指定作为this
使用的内容。就是
link.addEventListener('click', app.click.bind(app));
这是因为函数在事件侦听器中被引用,然后在该上下文中调用,使函数中的this
成为元素,而不是对象文本。函数的定义方式对于它的this
值并不重要,重要的是它的调用方式。这是因为函数在事件侦听器中引用,然后在该上下文中调用,使函数中的this
成为元素,而不是对象文本。函数如何定义并不重要,当涉及到它的这个值时,重要的是如何调用它。您应该使用app.saywhat()
,这将是这里唯一合乎逻辑的操作,因为只有一个app
,而OPS不需要这样做instantiated@vsync我同意,但是如果OP确实有多个对象,可能会调用app2=Object.create(app)
,或者通过更改代码来使用构造函数,那么就需要绑定了。这就是为什么我列出了这两种方法,这就是我在寻找另一种解决方案时的想法。两位都谢谢,没错。您应该使用app.saywhat()
,这将是这里唯一合乎逻辑的操作,因为只有一个app
,而OPS不需要这样做instantiated@vsync我同意,但是如果OP确实有多个对象,可能会调用app2=Object.create(app)
,或者通过更改代码来使用构造函数,那么就需要绑定了。这就是为什么我列出了这两种方法,这就是我在寻找另一种解决方案时的想法。谢谢两位。