2013-04-25 48 views
0

我有一个在创建对象之前定义的函数。这个预定义的函数使用'this'关键字来更改对象中属性的值。在对象内部,我有一个方法用一个参数调用预定义的方法。然而,在调用这个方法之后,我尝试打印应该更改的属性的值,但它仍然保持不变。我该如何解决?使用预定义的方法更改对象的属性Javascript

var setName = function(yourName){ 
    this.name = "Your name is " + yourName; 
}; 

// create an object called `human` 
var human = { 
    name: "Nothing here yet", 
    setHumanName: function(name) { 
     setName(name);//Name should be changed now 
    } 
}; 

human.setHumanName("Emeka"); 
console.log(human.name); //this does not print the new value of name 
+1

你检查了JS控制台吗?如果我正确地记得它,'setName'意思是'this'不是你所期望的,你将会得到“无效属性”错误。 – SJuan76 2013-04-25 11:22:28

+0

我没有收到任何错误,但是当我尝试在setHumandName函数内部使用console.log(name)时,它会输出正确的名称值。 – smac89 2013-04-25 11:30:25

回答

1

只需使用

var human = { 
    name: "Nothing here yet", 
    setHumanName: setName // no invocation, only assigning the function 
}; 

显式调用任意函数的对象(所以他们this keyword设为该对象)使用该函数的call method

+0

哦哇!那是我们被告知这样做的方式,但是当我之前尝试过或者忘记这样做时,我得到了错误信息。现在看起来比其他答案简单得多,在我的层面上更多。感谢你们都发布了答案 – smac89 2013-04-25 11:35:39

2

你应该调用对象上下文的功能:

setHumanName: function(name) { 
    setName.call(this, name); 
} 
+0

感谢这工作; call()函数做了什么? – smac89 2013-04-25 11:30:45

+0

@ Smac89 [使用给定的值和单独提供的参数来调用函数](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/call) – fardjad 2013-04-25 11:54:48