javascript和这个

Apo*_*sis 1 javascript

function distance(r,t){
        this.rate = r,
        this.time = t,
        this.calculate = function() {return rate * time ;};
        return this;
}

var trip1 = distance(2,4);
var trip2 = distance(5,7);
var trip3 = distance(3,10);
document.write("<br>trip1: " + trip1.calculate());
document.write("<br>trip2: " + trip2.calculate());
document.write("<br>trip3: " + trip3.calculate()); 
Run Code Online (Sandbox Code Playgroud)

输出中

trip1: 30
trip2: 30
trip3: 30
Run Code Online (Sandbox Code Playgroud)

输出不应该是

trip1: 8
trip2: 35
trip3: 30
Run Code Online (Sandbox Code Playgroud)

ste*_*ecb 5

每个新距离都应该是一个新对象.另外,在inside计算中,你必须通过"this"关键字来引用当前实例

function distance(r,t){
        this.rate = r,
        this.time = t,
        this.calculate = function() {return this.rate * this.time ;};
        return this;
}

var trip1 = new distance(2,4);
var trip2 = new distance(5,7);
var trip3 = new distance(3,10);
document.write("<br>trip1: " + trip1.calculate());
document.write("<br>trip2: " + trip2.calculate());
document.write("<br>trip3: " + trip3.calculate()); 
Run Code Online (Sandbox Code Playgroud)

编辑上面没有NEW关键字的例子:

function distance(r,t){
        if ( !(this instanceof distance) ) //checking if I'm using 'new' or not
            return new distance(r, t); 
        this.rate = r,
        this.time = t,
        this.calculate = function() {return this.rate * this.time ;};
        return this;
}

var trip1 = distance(2,4);
var trip2 = distance(5,7);
var trip3 = distance(3,10);
document.write("<br>trip1: " + trip1.calculate());
document.write("<br>trip2: " + trip2.calculate());
document.write("<br>trip3: " + trip3.calculate()); 
Run Code Online (Sandbox Code Playgroud)