JS中的繼承有點奇怪,但其他人都是糾正你不應該在構造函數中放置原型。原型函數/變量的重點在於,對於所有類的所有實例,您只能使用該函數的單一實例。同樣,它對班級變量很有好處,這是每個實例都會引用的奇異值。
真的,你應該做的B類繼承自A類:
function B(){
this.object = new A();
}
B.prototype.a = function(){
return object.a;
}
它可以是一個有點惱人,因爲你必須再創建新的getter/setter方法,buuuuuuuttttt,如果你感覺有點冒險,你可以建立這樣的事情......
function breakApart(what){
var functions = [];
var properties = [];
for(property in what){
if(typeof what[property] == 'function'){
functions.push({'name':property,'value':what[property]});
}else{
properties.push({'name':property,'value':what[property]});
}
}
var data = [
{'title':'functions','data':functions},
{'title':'properties', 'data':properties}
];
return data;
}
添加幾個eval()函數調用和一些邏輯,你可以讓這個功能打造你新的getter/setter方法/函數的引用。
這是有效的,但鑑於它意味着在原型繼承變量和它自己的成員之間進行區分,所以這可能是一種比問題更糟糕的治療方法(函數外的聲明)。 – Macha 2010-06-19 17:36:18
我不知道任何其他方式做這樣的事情。在聲明它之前,不可能設置函數的原型。您目前使用的方法是「按書」方式。 – tcooc 2010-06-19 17:47:51
指定'this.prototype'沒有意義,應該在[構造函數](https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Working_with_Objects#Using_a_Constructor_Function)上使用'prototype'屬性,''這個值只是一個新的對象實例。 – CMS 2010-06-19 18:09:53