我知道一个对象是一个变量,而一个函数是一种对象,但我仍然对你应该如何引用以下代码中的word
感到困惑:
var word;
exports.setWord = function(c, ch){
word = c.get('chats')[ch];
Ti.API.debug('Course ' + course.get('title')
};
var updateView = function(){
for(var i = 0; i < word['comments'].length; i++){
var text = word['comments'][i],
};
答案 0 :(得分:0)
“对象是变量”并非严格属实。变量可以指向到对象,但对象本身不是变量。例如:
var a = new Foo();
var b = a;
这里有两个变量,但只有一个对象。现在,通常你会听到人们说“a是一个对象”或“一个是Foo”,但这只是一个口头/书面的快捷方式,更正确的“a是一个当前指向Foo类型对象的变量”。
在您的情况下,'word'始终是一个变量。它最初是一个不指向任何东西的变量,换句话说它是未定义的。在setWord函数中,你将一个对象分配给'word',所以你现在可以说“word是一个对象”,但更准确地说,你的意思是“word是一个当前指向一个对象的变量”。
答案 1 :(得分:0)
你将单词称为“变量单词”,但这可能不是你所要求的。
在第1行中,您所知道的是声明了名为“word”的变量,但未定义。
在setWord
函数中,您将word
设置为......某事。从它自己的功能来看,我们不知道它的设置是什么,只是设置它。
updateView
告诉我们更多关于word
的期望。 word['comments']
告诉我们word
旨在成为名为comments
的成员的对象。 word['comments']
等同于word.comments
- 唯一的区别是[]
语法允许您使用变量访问数据成员。我们可以告诉我comments
做了什么,它是有长度的东西。虽然它可能是一个数组,但我们无法保证。
我们也无法保证word
代表updateView
函数中的任何内容,因为在exports.setWord
之前调用updateView
时,您提供的代码不会显示调用。如果不是,则word
仍未定义,word['comments'].length
将引发错误。
由于所有对象都是动态的,因此您永远不会真正知道对象内部的内容。您可以从代码中了解对象的期望。如果要查看word
对象中的每个成员,可以执行以下操作:
var s = "";
for (var member in word) {
if (word.hasOwnProperty(member)) {
s += member + ": " + word[member] + " [" + typeof(word[member]) + "]";
}
}
alert(s);
这将遍历word
中的每个成员,如果它只属于word
,则打印出其名称,值和类型。它可以让您更好地了解word
对象的期望。
答案 2 :(得分:0)
Word是一个变量。无论内在的是什么,它总是一个变数。因为Javascript是动态类型,变量可能会改变它存储的类型。
在脚本的开头,字是ponting到Undefined对象,后来它指向一个对象,但它是一个变量。
编辑内容:
当你声明一个新变量时,它是未定义的,直到你为它指定了一些东西。
var word; //word is undefined
在代码中有一个分配给单词
word=c.get('chats')[ch];//Now it has a primitive value or a pointer to an object
但现在不知道里面的内容是什么。
可以用两种不同的方式调用对象:obj ['property']或object.property。
word['comments'] //word is pointing an object
在这里你使用第一个来调用 word ,所以我们认为之前的asignation是一个对象asignation。
最后你将 word ['comments'] 的结果称为数组(或具有长度属性和数字索引的对象)
word['comments'].length
word['comments'][i]
请记住,在javascript中,所有对象都被指定为引用,因此变量永远不会是对象,而是指向对象的指针。