2014-05-23 10 views
0

我的自行车方法有两个属性。前轮和后轮。我想要另一个属性,这是一个新属性,称为传动比属性,可通过乘以前后轮编号获得。我写的代码给出了连续的错误,它可以被修复。在对象内部乘以两个属性

function write() { 
    var bicycle = { 
     price: 20000, 
     model: "raleigh", 
     front_gear: 3, 
     rear_gear: 7, 
     gear_ratio: function() { 
      ratio: this.front_gear * this.rear_gear, 
     } 
    } 
    document.write("this is a " + bicycle.gear_ratio.ratio + " speed bike"); 
} 
window.onload = write; 
+0

什么错误?你可以请你显示错误吗? – shujatAli

+0

它说在第14行的语法错误 –

+0

哪一行是第14行? –

回答

7
gear_ratio: function() { 
     return this.front_gear * this.rear_gear 
    } 
    document.write("this is a " + bicycle.gear_ratio() + " speed bike"); 

讲述的是我可以推荐你最好的做。如果您仍然希望对象:

gear_ratio: function() { 
     return { 
      ratio: this.front_gear * this.rear_gear 
     } 
    } 
    document.write("this is a " + bicycle.gear_ratio().ratio + " speed bike"); 

它可以写类似:

function bike(settings){ 
    // Make settings an object so we can use it always 
    if (typeof settings != 'object') 
      settings = {} 

    // if settings has a price use that, otherwise use 0 
    this.price = settings.price || 500; 

    this.model = settings.model || "custom"; 

    this.front_gear = settings.front_gear || 2; 

    this.rear_gear = settings.rear_gear || 2; 

    this.__defineGetter__("gear_ratio", function(){ 
     return this.front_gear * this.rear_gear; 
    }); 

} 

function write() { 
    var bike1 = new bike({ 
     price: 20000, 
     model: "raleigh", 
     front_gear: 3, 
     rear_gear: 7, 
    }); 
    var bike2 = new bike({ 
     front_gear: 3, 
    }); 
    document.write("<br /> bike 1 is a " + bike1.gear_ratio + " speed bike by " + bike1.model + " costing " + bike1.price); 
    document.write("<br /> bike 2 is a " + bike2.gear_ratio + " speed bike by " + bike2.model + " costing " + bike1.price); 
} 

当函数调用是隐含的,但是这需要你的自行车是一个实际的实例化类,和将无法在每个浏览器中工作,并且更难以调试。让我知道你是否想要更好的解释。

+0

+1我正要发布这样的答案:D – shujatAli

+0

它工作得很好。你可以解释一下使用bicycle.gear_ratio()。比率代替bicycle.gear_ratio.ratio会有什么不同。 –

+1

@ user3138436这是一个函数调用,让浏览器知道你想要的是函数的结果,而不是函数本身(在JavaScript函数中只是特殊类型的对象,它们本身具有属性和东西,直到你把它放在括号后面javascript不知道你打算评估内容)。 – scragar

-6

改变这种

window.onload = write; 

这个

window.onload = write(); 

你调用该函数以不适当的方式

+5

不要这样做 - 这会立即调用write(),而不是onload '。 –

相关问题