2015-12-05 100 views
1

學習JavaScript的時刻,堅持繼承。問:我 如何繼承first功能delay功能second用不同的文字又名 - var text如何添加功能到現有的繼承

var first = (function() { 
    var text = "test!"; 
    return { 
     delay: function(time) { 
     setTimeout(function() { 
     alert(text); 
     }, time) 
    } 
    } 

})(); 


first.delay(400); 
second.delay(1000); 

function second() { 
    var text = 'second'; 
} 

我是否需要使用first.prototype.delay.call(this, time)?我無法弄清楚。 或者我是否需要像這樣創建延遲功能:first.prototype.delay = function(time) {...} etc... ?我該如何實現這個功能?我想我可以用不同的方法做到這一點......

+0

你真的不能「繼承」了 - 'first.delay'關閉了一個變量,它是無法訪問到你,有什麼你可以做的,但完全覆蓋功能。 – Bergi

+0

@Bergi好的,如果我只是離開'var first = function(){...}'然後呢? – kros

+0

在考慮這個'text'之前,請認爲'first'是一個有屬性的對象,而'second'是一個函數。不要混合它們。你想要什麼? – Bergi

回答

1

你可能會想仔細看看closures。無論如何,繼承並不能真正幫助你,因爲你需要一個本地封閉變量來處理那個超時回調。

閉包是由函數動態生成的函數 - 正是我們在此需要的幹代碼。

function makeAlerter(text) { 
    return { 
     delay: function(time) { 
      setTimeout(function() { 
       alert(text); 
      }, time); 
     } 
    }; 
} 

var first = makeAlerter("test!"); 
var second = makeAlerter("second"); 
var third = …; // as many as you want 

first.delay(400); 
second.delay(1000); 
+0

謝謝,這就是我要找的,是的,我會去看看更多關於閉包。 – kros