2013-09-21 4 views
0

В других браузерах я могу вызвать родительский метод из свойства __proto__. Но это не работает в IE8. Есть ли способ вызвать родительский метод в IE8? ПримерВызвать родительский метод IE8

Код:

function Foo() { 
    this.init = function (msg) { 
     alert("super method invoked"); 
    }; 

    this.toString = function() { 
     return "Foo"; 
    } 
} 

FooExtended.prototype = new Foo(); 

function FooExtended() { 
    this.init = function (msg) { 
     if (this.__proto__ == undefined) { 
      alert("super invoke not supported") 
     } else { 
      this.__proto__.init(msg); 
     } 
    }; 

    this.toString = function() { 
     return "FooExtended"; 
    } 
} 

var foo = new FooExtended(); 
foo.init(); 

ответ

1

Вместо

this.__proto__.init(msg) 

попробовать

Foo.prototype.init.apply(this, msg); 
+0

Это дает сообщение в консоли 'Foo.prototype.init' нуль или нет объекта – Mrusful

+0

@Mrusful, ok, переместите определение Foo.prototype.init вне конструктора, то есть объявите его как var и присвойте его значение e как функция. Кроме того, вместо использования используйте вызов. – fred02138

+0

Знаете ли вы, какая разница между 'Foo.prototype.init (this)' и 'FooExtended.prototype.init (this)'? Где 'this' является контекстом' FooExtended'. Если посмотрите на пример выше. – Mrusful

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