0

我试图理解 Javascript 的原型。我知道我可以单独向原型添加功能Calculator.prototype.calculate = function(){};,但是当我尝试设置新原型时,一切都崩溃了。calc.prototype 返回未定义。我的问题是为什么我们不能设置一个新的对象作为原型?如何将方法批量添加到原型中,而不是一一添加?

var calc = new Calculator();

function Calculator(){
    this.array = [];
    this.results = 0;
}

Calculator.prototype = {

    calculate: function(){  
        try{
        results = eval(this.array.join(''));
        this.array = [results];
        return results; 
        }
        catch(error){
            alert('Wrong arguments provided');
            return this.array.join('');
        }
    },

    isNumber: function(str){
        return !isNaN(parseFloat(str)) && isFinite(str);
    },

    addToOperationsArray: function(str){
        if (this.array.length <= 0 && !this.isNumber(str)){ // Don't add operand before any number.
            return; 
        }

        this.array.push(str);

    },
    clearEverything: function(){
        this.array = [];
    }
};
4

1 回答 1

1

您很可能在分配(新)原型对象之前尝试访问它。您可以使用Calculator构造函数,因为函数声明会受到提升。作业不是。

在进行这些更改之前构建的对象原型将是调用时的原型对象。

// use the default prototype
var test1 = new Test();

// a new prototype is assigned
// objects created from this point will use it
Test.prototype = {
  report: function(){ alert('jah live children yea'); }
};
var test2 = new Test();

test1.report();     // Uncaught TypeError: test1.report is not a function
test2.report();     // alerts


function Test(){}   // hoisted so you can use it before this line

请注意,如果原型对象本身没有更改,而只是扩展,则可以将原型属性与在将它们添加到原型之前创建的对象一起使用。

在分配功能之前不要进行调用,这一点很重要。

var test1 = new Test();

test1.report();     // Uncaught TypeError: test1.report is not a function

// extend the prototype object
// the added property is accessible by existing objects
Test.prototype.report = function(){
  alert('jah live children yea');
};

test1.report();     // alerts


function Test(){}
于 2016-08-02T13:06:50.783 回答