1

以下のフィドル/コードを参照してください: http://jsfiddle.net/kmiklas/3YdTA/4/

質問:

  • 子の setter 関数への呼び出し (例では、への呼び出しObject.create(99)) が親の設定を変更するのはなぜですか? この関数をorangeのコンテキストで呼び出しましたが、 redの値も変更していることに注意してください。
  • さらに重要なのは、継承されたゲッター/セッター関数を親ではなく子に適用するにはどうすればよいでしょうか?
  • ここで何が欠けていますか?

var Square = function () {
    var side;
    this.setSide = function(s) {
        side = s
    }
    this.getSide = function() {
        return side;
    }
}
var red = new Square();
var orange = Object.create(red);
red.setSide(100);
var $container = $('#container');
$container.append('orange.getSide(): ' + orange.getSide() + '<br>');
$container.append('red.getSide(): ' + red.getSide() + '</br><br>');
$container.append('<i>Now we call orange.setSide(99)...</i><br></br>');
orange.setSide(99);
$container.append('orange.getSide(): ' + orange.getSide() + ' <i>...as expected.<br></i>');
$container.append('red.getSide(): ' + red.getSide() + '!? <i>Why does the call to orange.setSide(99) affect the side length of the parent?</i></br>');
4

1 に答える 1

2

The Object.create() method creates a new object with the specified prototype object and properties.

MDN

 var orange = Object.create(red);

この方法でオブジェクトを複製するのではなく、新しい参照を作成しているため、元のオブジェクトに加えた変更は、このオブジェクトのすべてのコピーに影響します

var x = {name:"foo",phone:"bar"};
var y = Object.create(x);

x.u = "123";

console.log(y);//{name: "foo", phone: "bar", u: "123"} 
console.log(x);//{name: "foo", phone: "bar", u: "123"} 

オブジェクトは JavaScript でコピーさRefれます

デモ

JavaScript オブジェクトを正しく複製するにはどうすればよいですか? でこれを参照してください。

于 2014-01-21T19:02:26.343 に答える