Почему прототип javascript не работает в этом случае

Мой случай (почему "test1" не появляется в окне предупреждения):

var Parent=function(){
    this.test1= function(){ 
        alert("test1");
    }
}

var Child=function(){
   this.prototype=new Parent();
}

var test=new Child();
test.test1();

http://jsfiddle.net/c3sUM/2/ (тот же код онлайн, чтобы попробовать)

Спасибо

2 ответа

Решение

Проблема в том, что вы не назначили Childпрототип, но вместо этого, сделал свойство prototype в случае Child который указывает на случай Parent,

вместо этого сделайте это:

var Child = function(){};        // create constructor
Child.prototype = new Parent();  // assign instance of parent to constructor's
                                 // prototype

Подобный ответ может помочь

Ваш код будет намного понятнее, если использовать объявления функций:

// Parent constructor
function Parent() {}

// Methods of Parent.prototype are inherited by 
// instances of parent
Parent.prototype.test1 = function() {
    alert('test 1');
}

// Child constructor
function Child(){}

// Make Child.prototype an instance of Parent so 
// instances inherit from Child and Parent
Child.prototype = new Parent();

// Instance inherits from Child (and hence Parent);
var child = new Child();

child.test1();  // 'test 1'

Единственная причина использования выражений функций над объявлениями в этом случае состоит в том, что вы хотите динамически создавать конструкторы на основе некоторой другой логики.

Другие вопросы по тегам