3
我想要習慣JavaScript的「真實」原型繼承(ECMAScript 5),但不知何故,我的思想似乎被困在經典的繼承模式中。原型繼承和靜態方法
我想創建執行簡單的操作,如加,減等Vector對象
現在有兩種方案:
- #1:添加矢量B「至」載體A(矢量一個被修改的)
- #2:添加矢量B 「到」 載體B(在創建新的向量C,其是A的總和與B)
在經典遺傳我想CR吃掉了場景#1的實例方法和案例#2的靜態方法,但似乎在原型繼承中沒有靜態函數。
那麼,實現這兩種場景的乾淨方法是什麼?
這裏是我到目前爲止有:
var Vector = {
x: 0,
y: 0,
z: 0,
initialize: function(x,y,z) {
this.x = x;
this.y = y;
this.z = z;
return this;
},
add: function(vec) {
this.x += vec.x;
this.y += vec.y;
this.z += vec.z;
return this;
},
print: function() {
console.log('x:', this.x, 'y:', this.y, 'z:', this.z);
}
};
var firstVector = Object.create(Vector).initialize(1,2,3);
var secondVector = Object.create(Vector).initialize(4,5,6);
firstVector.print(); // Outputs: x:1, y:2, z:3
secondVector.print(); // Outputs: x:4, y:5, z:6
firstVector.add(secondVector);
firstVector.print(); // Outputs: x:5,y:7,z:9
// What I'm looking for:
var thirdVector = Vector.add(firstVector, secondVector);
感謝您的諮詢!
更新:
這是我試圖實現使用保羅的意見靜態函數(謝謝!):
var vectorPrototype = {
hello: function() { console.log('hello I am the prototype'); }
};
var Vector = Object.create(vectorPrototype);
Vector.hello = function() { console.log('hello I am the static function'); };
Vector.init = function() {
return Object.create(vectorPrototype);
}
var vec1 = Vector.init();
vec1.hello(); // says: 'hello I am the prototype'
Vector.hello(); // says: 'hello I am the static function'
嗨,非常感謝您的建議和鏈接!我試圖實現一個靜態函數(請參閱我的問題中的更新),這是「正確」的方式嗎? – sled
是的,看起來不錯:) – Paul
在類似的情況下,我的靜態方法已經連接到「prototype」(vectorPrototype)我可以繼承sublcass(Vector)還是應該在我的子類中定義它?謝謝 –