2012-07-30 122 views
0

當我點擊按鈕時調用Func2。爲什麼我沒有彈出?我應該在第一次之後看到警報警報(「覆蓋1」)和警報(「覆蓋2」)嗎?JavaScript中的替代

// JavaScript Document 
function person(name, surname) { 
    this.name = ""; 
    this.surname = ""; 
    this.age = "11"; 
    this.setName(name); 
    this.setSurname(surname); 
    //alert('Person instantiated'); 
} 
person.prototype.setName = function(name) { 
    this.name = "Sir1" + name; 
} 
person.prototype.setSurname = function(surname) { 
    this.surname = "-" + surname; 
} 
person.prototype.setAge = function(newAge) { 
    this.age = newAge; 
} 
person.prototype.show = function() { 
    alert("override1"); 
} 
function employee(name, surname, company) { 
    //if (arguments[0] === inheriting) return; 
    person.call(this, name, surname); // -> override del costruttore 
    //this.name = "Sir2"+name; 
    this.company = company; 
}; 
employee.prototype.show = function() { 
    person.prototype.show; 
    alert("override2"); 
} 
function test2() { 
    employee.prototype = new person(); 
    // correct the constructor pointer because it points to Person 
    employee.prototype.constructor = employee; 
    // Crea un oggetto impiegato da persona 
    impiegato = new employee("Antonio", "Di Maio", "Consuldimo"); 
    //impiegato.show(); 
    impiegato.show(); 
}​ 

感謝

+0

我想你應該查看[markdown editing help](http://stackoverflow.com/editing-help/)頁面。一個寫得好的問題會給你寫得很好的答案。 – zzzzBov 2012-07-30 15:03:06

+0

什麼是'Func2'? – 2012-07-30 15:04:15

+0

什麼按鈕?您還沒有張貼所謂的「測試2()」 – Pointy 2012-07-30 15:04:22

回答

1

test2()你用person實例替換整個employee.prototype,從而使用從person繼承的函數覆蓋之前定義的employee.prototype.show函數。另外,正如編碼框的回答中所述,在employee.prototype.show()中,您不是調用person.prototype.show(),而只是在無效的情況下對其進行評估,而這完全沒有任何效果。

你必須設置employee的父定義其原型任何其他方法前:

employee.prototype = new person(); 
employee.prototype.constructor = employee; 
employee.prototype.show = function() { ... } 

此外,當你打電話給你父母的方法,你需要自己提供正確的上下文:

person.prototype.show.call(this); 
+0

你能幫我解決嗎? – user1343454 2012-07-30 21:49:19

+0

@ user1343454:代碼順序很重要。你對'employee.prototype'所做的是:'array = [1];的Array.push(2);陣列= [];的Array.push(3);'。 – Jay 2012-07-31 01:54:03

+0

謝謝。 Lanzz的建議有所幫助。 – user1343454 2012-07-31 11:19:34

0

employee.prototype.show你是不是調用person.prototype.show方法 - 它改成這樣:

employee.prototype.show = function() { 
    person.prototype.show(); 
    alert ("override2"); 
} 
+2

該方法將得到'person.prototype'爲'this'這實在是意外的代碼。 – Esailija 2012-07-30 15:06:03

+0

你funtion似乎我已經寫在我的代碼相同:( – user1343454 2012-07-30 21:23:04

+0

做,但我仍然只看到overide1警報消息:( – user1343454 2012-07-30 21:40:21