Javascript 使用JS对象和函数

Javascript 使用JS对象和函数,javascript,function,object,Javascript,Function,Object,我是javascript的新手,我想知道为什么当我调用它时,bob.age仍然是30岁,而age是50岁。我已经在setAge中将age设置为50,将50分配给this.age,我知道这是对bob.age的引用,因此age和bob.age应该具有相同的值 // here we define our method using "this", before we even introduce bob var setAge = function (newAge) { this.age = ne

我是javascript的新手,我想知道为什么当我调用它时,
bob.age
仍然是30岁,而
age
是50岁。我已经在
setAge
中将
age
设置为50,将50分配给
this.age
,我知道这是对
bob.age
的引用,因此
age
bob.age
应该具有相同的值

// here we define our method using "this", before we even introduce bob
var setAge = function (newAge) {
    this.age = newAge;
};
// now we make bob
var bob = new Object();
bob.age = 30;
// and down here we just use the method we already made

// change bob's age to 50 here
bob.setAge = setAge(50);

bob.setAge=setAge(50)

所要做的就是将bob的setAge属性设置为调用setAge(50)的结果-由于setAge retunrs未定义,因此实际上设置了bob.setAge=undefined。也许你打算做的是

bob.setAge = setAge; 
bob.setAge(50);

未经测试,但我认为这是正确的

在您的代码/理解中有几个错误,我将从为什么这是特别错误开始,并解释它周围的概念

var bob=new Object()
使bob成为常规对象

设置
函数接受一个参数。它将
this.age
设置为该值。但是,设置被置于全局范围内。因此
->
窗口
。这就是为什么当你在全局范围内输入
age
时,你得到了50

Jaromanda是正确的,您需要将函数
setAge
放在对象bob上

如果您正在玩
这个
,您可能会对伪经典实例化风格感兴趣:

var Person = function(name, age) {
    this.name = name;
    this.age = age;
}

Person.prototype.setAge = function(newAge) {
    this.age = newAge;
}

var bob = new Person ('Bob', 30);
bob.setAge(50);
bob.age; 
// 50

关键字this充当占位符,并将在实际使用该方法时引用调用该方法的任何对象

查看方法设置以了解其工作原理。通过使用关键字this,setAge将更改调用它的任何对象的age属性


然后当我们说bob.setAge=setAge时;这意味着每当我们在setAge方法中键入bob.setAge()this.age时,都会引用bob.age。

请在问题本身中包含代码,而不仅仅是图像,这样人们在回答中更容易复制
->
可能会误导新手。我建议将其更改为标准的
//注释
,这使我更加confused@user3783598当前位置我在什么时候失去了你?上半场有意义吗?直到我说Jaromanda是对的?伪经典是另一件事,你现在可能不应该担心,但我很乐意进一步澄清/解释。我只是在你制作的样本中没有得到原型,但其余的都很好。反正我已经明白了。ThanksPerson.prototype是一个可以附加函数的对象。任何
都可以访问
原型
上的所有功能。因此,即使从技术上讲,
bob
只有
name
age
属性,他也可以访问附加到原型上的函数,因为他是
等等,为什么需要为bob指定setAge。setAge?你的意思是相反的,将bob.setAge分配给setAge-有关解释,请参阅ChadF更完整的答案。我认为您只是混淆了bob.setAge是bob的属性,而setAge是函数。因此,当您将bob.setAge分配给setAge时,这意味着bob.setAge由setAge定义,并且可以通过向参数传递值来访问setAge函数。设置(20);