如何扩展 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);
我使用
从我的模板实例化一个函数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);