1

私はこのセッターを持っていますが、なぜ値を設定するのかわかりません、そしてそれは変わりません:

    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;
}
4

2 に答える 2

3

Javascriptは参照によって何も渡しません、設定this.headは魔法のようheadに他のものを参照させません(これは参照によって意味されます)

メソッドはではなくを.getHead()返すため、割り当てはまったく影響しません。それらは異なるオブジェクトを参照します。headthis.headgetHead()

これを試して:

this.getHead = function() {
    return this.head;
}

基本的にあなたが持っているものは最も可能性が高いです:

function Ctor( head ) {

    this.getHead = function() {
        return head;
    }

    this.setHead = function( head ) {
        this.head = head;
    }

}

setHeadセットオブジェクトプロパティ。asは、初期化時にコンストラクターに渡される変数を返しますgetHeadhead

この混乱を避けるために、オブジェクトのプロパティとプロトタイプに固執する必要があります。それはすべて非常に簡単です。

function Ctor( head ) {
    this.head = head;
}

Ctor.prototype.getHead = function() {
    return this.head;
};

Ctor.prototype.setHead = function(head) {
    this.head = head;
};
于 2012-08-01T16:47:40.000 に答える
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;
  }
}
于 2012-08-01T16:39:59.123 に答える