如果只有一个对象的实例,我还应该使用构造函数吗?

Jar*_*ham 5 javascript

我一直在深入探索JS世界,并且遇到了三种不同的方式来开发网站的前端推车:

具有原型函数的构造函数

var cart = function(){
    this.items = {}
}

cart.prototype.increaseItemQty = function(partNumber){
    if(this.items[partNumber]){
        this.items[partNumber].qty += 1;
    } else {
        this.items[partNumber] = {
            qty : 1
        };
    }
}

cart = new cart();
Run Code Online (Sandbox Code Playgroud)

方法在构造函数中

var cart2 = function(){
    this.items = {};
    this.increaseItemQty = function (partNumber) {
        if(this.items[partNumber]){
            this.items[partNumber].qty += 1;
        } else {
            this.items[partNumber] = {
                qty : 1
            };
        }
    }
}

cart2 = new cart2();
Run Code Online (Sandbox Code Playgroud)

对象方法

var cart3 = {
    items : {},
    increaseItemQty : function(partNumber){
        if(this.items[partNumber]){
            this.items[partNumber].qty += 1;
        } else {
            this.items[partNumber] = {
                qty : 1
            };
        }
    }
};
Run Code Online (Sandbox Code Playgroud)

如果我知道只有一个购物车的实例,那么我应该只使用这种Object Method方法吗?有什么理由我还应该使用构造函数吗?

Mat*_*zer 2

如果您认为需要使用一些默认值初始化购物车或执行一些在使用整个对象之前必须强制执行的初始化操作,则应该使用构造函数。

另一方面,也许你失踪了Object.create。您不需要构造函数来实现原型链:

var A = {
    doStuff() {
        console.log("I did some stuff");
    }
};

var B = Object.create(A);
B.moreStuff = function() {
   console.log("I did even more stuff");
};

// A new object where its prototype is B
var someB = Object.create(B);
b.doStuff(); // ...from A
b.moreStuff(); // ...from B
Run Code Online (Sandbox Code Playgroud)