2016-03-20 3 views
2

Я экземпляр функции из моего шаблона сКак расширить прототип Javascript?

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

Но теперь мне нужно расширить «Product.Image», например, с "Product.BetterImage"

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

Мой оригинальный класс начинается так:

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 

Что мне здесь не хватает или что не так? Может ли кто-нибудь объяснить мне, что здесь не так?

ответ

1

Это связано с яваскрипта наследственного и прототип делегации - увидеть эту хорошую 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(); 

Правильный способ сделать это, чтобы создать свой класс «продукт», а затем добавить непосредственно в его прототип, так как:

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 
} 

затем создать экземпляр или Instan

var myProduct = new Product(data); 
+0

Но как я могу расширить «Product.Image» с помощью «Product.BetterImage»? Я хочу использовать все методы из «Product.Image» в моем «Product.BetterImage», но переопределить один или два метода с ним. – Tipo

+1

В приведенном выше коде все методы, которые вы ставите в betterImage, будут там, если они не вернутся к исходному Product.prototype. , если вы хотите продлить прототип продукта, его, вероятно, время, чтобы создать новый класс ... вы читали документы? Есть несколько способов сделать это. Подсказка: посмотрите на документы, найдите пример внизу - это именно то, что вы ищете – JordanHendrix

 Смежные вопросы

  • Нет связанных вопросов^_^