如何扩展 Javascript 原型?

How to extend Javascript Prototype?

我使用

从我的模板实例化一个函数
new Product.Image({
        "title": document.querySelector('#image-title')
    });

但现在我需要扩展 "Product.Image" 例如"Product.BetterImage"

new Product.BetterImage({
        "title": document.querySelector('#better-image-title')
    });

我原来的class开头是这样的:

Product.Image = function (options) {
  //do something
}
Product.Image.prototype = new Product.Data();

现在我试着复制它来扩展"Product.Image":

Product.BetterImage = function (options) {
  //do something
}
Product.BetterImage.prototype = new Product.Image();

但是当我调用我的模板启动它时,我得到了以下错误:

Uncaught TypeError: Product.BetterImage is not a constructor

我在这里遗漏了什么或做错了什么? 谁能给我解释一下这是怎么回事?

这与 javascript 继承和原型委托有关 - 请参阅这个很好的 MDN 页面:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain

您的这部分代码不是必需的,导致了问题:

Product.Image = function (options) {
  //do something
}
Product.Image.prototype = new Product.Data();

正确的做法是创建你的 'Product' class 然后直接添加到它的原型中,像这样:

var Product = function(data) {
  this.data = data;
}

Product.prototype.image = function() {
   // return data here
}

Product.prototype.better = function(){
  // add stuff here
}

Product.prototype.betterImage = function(){
  // add more stuff here
}

然后创建实例或实例化您的 class 您可以使用 'new' 关键字

var myProduct = new Product(data);