我有这个setter,但我不知道为什么设定值而且它没有改变:
this.setHead = function(head){
console.log('Head: x:'+this.getHead().getX()+' y:'+this.getHead().getY());
console.log('temp Head: x:'+head.getX()+' y:'+head.getY());
this.head = head;
console.log('Head: x:'+this.getHead().getX()+' y:'+this.getHead().getY());
}
Chrome日志中的结果是:
Head: x:5 y:10 // old value
temp Head: x:1 y:7 //temporary value decide to copy
Head: x:5 y:10 // and the new valụe : NO CHANGE
我已经读过Javascript通过引用传递对象,我不知道它与Java的区别。如果没有,我不知道为什么会这样。请告诉我。
谢谢:)
@ Edited:我为日志添加了一行,看到了奇怪的结果:
console.log('Head: x:'+this.head.getX()+' y:'+this.head.getY());
Head: x:1 y:7
这很奇怪,因为我认为它应该与下面的线相同,但它不是
console.log('Head:x:'+ this.getHead()。getX()+' Y:'+ this.getHead()的getY());
我的getHead()
是:
this.getHead = function() {
return head;
}
答案 0 :(得分:3)
Javascript没有通过引用传递任何内容,设置this.head
并不会神奇地使head
引用其他内容(这是引用所暗示的内容)
您的.getHead()
方法会返回head
,而不是this.head
,因此该分配根本不会影响getHead()
。它们指的是不同的对象。
试试这个:
this.getHead = function() {
return this.head;
}
基本上你最有可能的是:
function Ctor( head ) {
this.getHead = function() {
return head;
}
this.setHead = function( head ) {
this.head = head;
}
}
setHead
设置对象属性,其中getHead
返回初始化时传递给构造函数的head
变量。
为了避免这种混淆,你应该坚持使用对象属性和原型,这一切都非常简单:
function Ctor( head ) {
this.head = head;
}
Ctor.prototype.getHead = function() {
return this.head;
};
Ctor.prototype.setHead = function(head) {
this.head = head;
};
答案 1 :(得分:1)
var o = function(){
var self = this; // assign 'this' function to a variable
// so that it can be accessed in child functions
var head = {};
this.getHead = function(){
...
return self.head;
}
this.setHead = function(head){
...
self.head = head;
}
}