Javascript:为什么复制值而不更改
Javascript : why copy value but not change
我有这个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有什么区别。如果没有,我不知道为什么会发生这种事。请告诉我。
谢谢:)
@编辑:我添加了一行日志,看到奇怪的结果:
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;
}
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;
};
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;
}
}
相关文章:
- MathJax正在复制我的方程式——为什么以及如何解决这个问题
- JavaScript继承:为什么从实例复制
- 为什么这个文件上传拖放不起作用,我完全复制了 CodePen 代码
- Javascript:为什么复制值而不更改
- 为什么一个值没有在javascript中复制到剪贴板
- 为什么Meteor在刷新后会复制数据库对象
- 为什么jQueryExtend无法递归复制这两个对象文字
- 为什么Nuget Javascript包复制到脚本文件夹
- 为什么 jQuery 扩展深拷贝不递归复制对象
- 为什么当我将变量复制到窗口对象时,它变得公共
- 为什么其他对象更改会反映到它从中复制的对象
- 为什么在寄生组合继承中需要复制原型
- 为什么AngularJS在我的路由中复制查询字符串
- 为什么我在这里陷入无限循环?- 在 Javascript 中复制数组
- 为什么我的表行被复制
- 为什么这个函数在运行时会报错,而复制到控制台时却没有报错?
- 为什么我的文本较短时复制到html
- 为什么这个数组复制不能像预期的那样工作
- 为什么rjs合并并缩小JS,然后复制所有文件到输出目录
- 为什么复制一个名为“切片”的数组?