var Todo = function(x){
this.data = x;
this.view = function(){
alert("hi")
check()
}
check = function(){
alert("checking")
alert(this.data)
}
}
Todo.prototype.add = function(item){
this.data.push(item)
}
var todo = new Todo([1,2,3])
alert(todo.data)
todo.add(5)
alert(todo.data)
todo.view()
在上面的代码中,为什么我无法在check方法中获取数据的值。我有点困惑。
答案 0 :(得分:3)
this
函数中的 check
引用全局对象window
。
修复:
var Todo = function(x){
this.data = x;
this.view = function(){
alert("hi");
this.check();
};
this.check = function(){
alert("checking");
alert(this.data);
};
};
如果你不想公开check
方法,那么你可以这样做。
var Todo = function(x){
this.data = x;
this.view = function(){
alert("hi")
check.apply(this); //here, by using apply method
}
var check = function(){
alert("checking")
alert(this.data)
}
}
答案 1 :(得分:1)
您已将check
声明为全局变量:
var a = 5; local variable
a = 5; global variable (attached to window)
因此,函数上下文(this
)在调用Window
时绑定到check()
,data
不包含check
属性。
所以你必须将this.check = function() {};
函数附加到Todo“class”:
todo
旁注,您可以通过在调用函数时手动将函数上下文设置为check.apply(todo);
来获得所需的功能:
{{1}}