在对象内部乘以两个属性

AL-*_*ami 0 javascript oop

我的自行车方法有两个属性.前档和后档.我想要另一个属性,这将是一个新的属性,称为齿轮比属性,可以通过乘以前后齿轮数得到.我写的代码给出了连续的错误.如何修复它.

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;
Run Code Online (Sandbox Code Playgroud)

scr*_*gar 7

    gear_ratio: function () {
        return this.front_gear * this.rear_gear
    }
    document.write("this is a " + bicycle.gear_ratio() + " speed bike");
Run Code Online (Sandbox Code Playgroud)

是我能推荐你做的最好的.如果你还想要一个对象:

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

可以这样写:

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);
}
Run Code Online (Sandbox Code Playgroud)

在暗示函数调用的情况下,这将要求您的自行车是实际的实例化类,并且不会在每个浏览器中工作并且更难调试.如果您想要更好的解释,请告诉我.