考慮下面的代碼:試圖總結我的頭周圍的物體,建設者和原型
function Robot(weapon) {
this.weapon = weapon;
this.fire = function() {
alert('Firing ' + this.weapon + 'projectile.');
};
}
var gunRobot = new Robot('gun');
與
function makeRobot(weapon) {
return {
weapon: weapon,
fire: function() {
alert('Firing ' + this.weapon + 'projectile.');
}
};
}
var laserRobot = makeRobot('laser');
所以,如果我理解正確的,這兩者之間的主要區別在於:在第一個示例中,gunRobot具有指向Robot的構造函數屬性,而在第二個示例中,laserRobot具有指向Object的構造函數屬性。兩者都沒有添加任何東西到他們的原型,對吧?現在
,如果我第一個例子改爲:
function Robot(weapon) {
this.weapon = weapon;
}
Robot.prototype.fire = function() {
alert('Firing ' + this.weapon + 'projectile.');
};
var gunRobot = new Robot('gun');
gunRobot的constructor屬性指向機器人的構造函數,其原型屬性具有屬性火。現在,如果我叫
gunRobot.fire();
如,gunRobot沒有按沒有火屬性,下了原型在原型鏈被訪問並檢查了火屬性,對不對?我主要是一個Java程序員,所以圍繞面向對象的JS概念來包裝我的頭很困難:-)。
權。你有什麼問題? –