我有一个构造函数,它注册一个事件处理程序:
function MyConstructor(data, transport) {
this.data = data;
transport.on('data', function () {
alert(this.data);
});
}
// Mock transport object
var transport = {
on: function(event, callback) {
setTimeout(callback, 1000);
}
};
// called as
var obj = new MyConstructor('foo', transport);Run Code Online (Sandbox Code Playgroud)
但是,我无法data在回调中访问已创建对象的属性.它看起来this并不是指创建的对象,而是指另一个对象.
我还尝试使用对象方法而不是匿名函数:
function MyConstructor(data, transport) {
this.data = data;
transport.on('data', this.alert);
}
MyConstructor.prototype.alert = function() {
alert(this.name);
};
Run Code Online (Sandbox Code Playgroud)
但它表现出同样的问题.
如何访问正确的对象?
我正在尝试获取组件模板内的canvas元素,为vuejs1找到了很棒的文档但不是vuejs2,其中"ref"是获取元素的唯一方法.我正在获取对象,但是当我尝试访问变量时,它是未定义的.
我的HTML
<div id="app>
<template id="image-capture">
<div class="row" >
<canvas ref="icanvas" ></canvas>
</div>
</template>
</div>
Run Code Online (Sandbox Code Playgroud)
我的js
const ic = {
template: '#image-capture' ,
created () {
console.log(this.$refs); //this returns object
console.log(this.$refs.icanvas); // but this is undefined
}
}
const routes = [
{ path: '/ic', component: ic},
]
const router = new VueRouter({
routes
})
new Vue({
router,
}).$mount('#app')
Run Code Online (Sandbox Code Playgroud)
我需要获得icanvas元素.
我有以下内容,但出现错误Cannot read property 'push' of undefined:
var vm = new Vue({
el: '#root',
data: {
posts: [],
newPost: {}
},
createPost: function() {
axios.post("api/posts/create", this.newPost).then(function (response) {
this.posts.push(response.data);
})
}
});
Run Code Online (Sandbox Code Playgroud)
在 Chrome 开发工具的网络选项卡中,我可以看到 response.data 显然是一个对象:
{
"id": 131,
"postContent": "<p>test</p>\n",
}
Run Code Online (Sandbox Code Playgroud)
那么为什么我会收到此错误?