-1

我知道一个对象是一个变量,而一个函数是一种对象,但我仍然对你应该如何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],  
};
4

3 回答 3

0

“一个对象是一个变量”并不完全正确。变量可以指向对象,但对象本身不是变量。例如:

var a = new Foo();
var b = a;

这里有两个变量,但只有一个对象。现在,您经常会听到人们说“a 是对象”或“a 是 Foo”,但这只是更正确的“a 是当前指向 Foo 类型的对象的变量”的口头/书面快捷方式。

在您的情况下,“单词”始终是一个变量。它一开始是一个不指向任何东西的变量,或者换句话说,它是未定义的。在 setWord 函数中,您将一个对象分配给“word”,因此您现在可以说“word 是一个对象”,但更正确的意思是“word 是一个当前指向一个对象的变量”。

于 2013-06-20T15:39:50.810 回答
0

您将 word 称为“可变词”,但这可能不是您要问的。

在第 1 行中,您所知道的是名为“word”的变量已声明,但未定义。

setWord函数中,您正在设置word...某事。从这个函数本身,我们不知道它被设置成什么,只是它被设置了。

updateView告诉我们更多关于预期的信息wordword['comments']告诉我们,word它旨在成为一个具有名为 的成员的对象commentsword['comments']相当于word.comments- 唯一的区别是[]语法允许您使用变量访问数据成员。我们可以从所做的事情中comments看出它是有长度的。虽然它可能是一个数组,但我们不能保证。

我们也不保证这word意味着updateView函数中的任何内容,因为您提供的代码不会显示是否exports.setWord在调用之前updateView调用过。如果不是, thenword仍然是未定义的,并且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对象的期望。

于 2013-06-20T15:43:09.500 回答
0

单词是一个变量。不管里面有什么,它总是一个变量。因为 Javascript 是动态类型的,所以变量可能会改变它存储的类型。

在脚本的开头是指向未定义对象,后来它指向一个对象,但它是一个变量。

编辑评论:

当你声明一个新变量时,它是未定义的,直到你给它赋值。

var word; //word is undefined

在代码中有一个分配给 word

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,所以我们假设 before 的分配是一个对象分配。

最后,您将word['comments']的结果称为数组(或具有长度属性和数字索引的对象)

word['comments'].length
word['comments'][i]

请记住,在 javascript 中,所有对象都被分配为引用,因此变量永远不会是对象,而是指向对象的指针。

于 2013-06-20T15:44:51.960 回答