0

そもそもJavascriptの原型構造がよくわからないので無理かもしれません。

私が持っている場合...

var vector = function( x, y ) {
    this.x = x || 0;
    this.y = y || 0;
}

var obj = function() {
    this.position = new vector( 0, 0, 0 );
}

var cube = new obj();

...呼び出しが と同等になるようにプロパティxを追加するにはどうすればよいですか。各参照のプロパティを同じ値にすることは可能だと思いますが、構文がわかりません。が定義されていないため、次のようなものは機能しません。objcube.xcube.position.xobj.prototype.x = obj.position.xobj.position

次の動作が可能になることを望みます

alert(cube.position.x); // 0
alert(cube.x); // 0

cube.position.x = 2;
alert(cube.position.x); // 2
alert(cube.x); // 2

cube.x = 4;
alert(cube.position.x); // 4
alert(cube.x); // 4

これは可能ですか?

私は Three.js を使用しているため、オブジェクトを書き直すことはできません。オブジェクトとそのプロトタイプに追加するだけです。

4

1 に答える 1

1

含まれるものをcube.x返すcube.position.xには、 のアクセサーとミューテーターを定義する必要がありますobj.prototype.x。アクセサーとミューテーターは JavaScript の比較的新しい機能であり、ほとんどのバージョンの IE ではサポートされていません。

var vector = function( x, y ) {
    this.x = x || 0;
    this.y = y || 0;
}

var obj = function() {
    this.position = new vector( 0, 0, 0 );
}
obj.prototype = {
    ...your prorotype methods here...
};
Object.defineProperty(obj.prototype, 'x', {
    get: function () {
        return this.position.x;
    },
    set: function (val) {
        this.position.x = val;
    }
});

//alternatively:
obj.prototype = {
    get x() {
        return this.position.x;
    },
    set x(val) {
        this.position.x = val;
    }
};

var cube = new obj();
cube.x; //0
cube.x = 10;
cube.position.x; //10
于 2013-05-02T17:09:27.987 に答える