2016-01-26 2 views
0

Допустим, у меня есть функция называется foo и я хочу функция bar наследовать вещи от foo, таких как:Наследование свойства других функций

function foo(param1, param2, param3) { 
    this.params = [param1, param2, param3]; 
    this.otherParameter = 3.141; 
} 
module.exports = foo; 
foo.prototype.getParams = function(i, bool) { 
    if(bool) { 
     return this.params[i]; 
    }else{ 
     return this.otherParameter; 
    } 
}; 

var foo = require('./foo'); 
function bar() { 
    this.barParams = [1, 2, 3, 4]; 
} 

Как бы я сделать bar основаны от foo как bar.prototype = new foo(1, 2, 3);? Должен ли я использовать функцию привязки? Если да, то как?

ответ

0

Это должно быть дубликатом вопрос, но: Обычный способ (до ES2015), как это:

function bar(/*...args for bar...*/) { 
    foo.call(this, /* appropriate arguments for foo */); 
} 
bar.prototype = Object.create(foo.prototype); 
bar.prototype.constructor = bar; 
+0

так, если я Foo содержит методы, такие как сложение и вычитание чисел, и бар получить эти номера , это позволит бару добавлять и вычитать числа, используя методы foo? –

+0

и вызовите методы foo через 'this.add (barArg1, barArg2);' –

+0

Да. 'bar.prototype' наследует методы от' foo.prototype', а экземпляры 'bar' наследуют их от' bar.prototype'. Затем экземпляр 'bar' также получает любые методы, добавленные' foo' (например, в конструкторе 'foo', если вы выполнили' this.add = function() {...}) ', потому что' foo' присваивает их, когда мы называем это «баром». (BTW: функции, предназначенные для использования с 'new', должны иметь начальную заглавную букву, например' Foo' и 'Bar'.) –