var todoList = {
todos: []
displayTodos: function () {
console.log(this.todos[i].todoText);
}
addTodo: function (todoText) {
this.todos.push({todoText: todoText});
}
}
这不是完整的程序,但我的问题是:
在displayTodos函数中,我如何访问todoText(在控制台日志行中)?
不应该在addToDo函数中声明的todoText变量的范围受限于它声明的函数addToDo?
由于
答案 0 :(得分:2)
这与函数的 * context * 有关。不是范围,而是上下文。
这与函数可见的变量有关。
函数可以访问它们的局部变量(在其定义的主体内声明包括任何参数参数,这些参数被添加为局部变量) 和 调用它们的封闭范围内的任何变量。
与 如何 调用该函数或 对象分配给在被调用/调用时。更具体地说,它定义了this
在函数定义中解析的内容。
示例
让我们假设您正在调用这些方法如下:
todoList.addTodo("some text");
todoList.addTodo("other text");
todoList.dispayTodo(1); // made this singular, see below for explanation
// logs out > "other text"
在上面的例子中,所有三个函数都被称为对象todoList
的方法,反过来,两者中的this
值将引用todoList
对象。
将包含属性todoText
的对象推入this.todos
数组后,您将拥有以下数组:
[
{todosText:"some text"},
{todosText:"other text"}
]
您可以通过将正确的索引推送到displayTodo
来访问每个逗留元素
(虽然稍微修改了代码以接受索引作为参数)
var todoList = {
...
displayTodo: function(i) {
console.log(this.todos[i].todoText);
}
}
答案 1 :(得分:2)
从技术上讲,你问过的事情都不是变量。它们都是您使用对象文字语法创建的不同对象的属性。