我在Javascript中有这种类型的原型继承代码。
function A() {
this.a = 1;
}
function B() {
someEl.innerHTML(this.a);
}
B.prototype = new A();
但是,我想知道是否有更好的方法,最好是将原型声明带入B
的声明。
我尝试在this.prototype
中设置B
,但它只显示this.a
为undefined
。
那么,有没有更好的方法呢?
答案 0 :(得分:4)
prototype
属性只能在constructor functions中使用,this.prototype
没有意义,因为this
只是新的对象实例,而不是构造函数。
在构造函数内部分配prototype
不是一个好主意,因为每次创建新对象时都会执行该赋值(new B();
)。
您的代码对我来说似乎是完全有效的,您唯一应该注意的是,如果您替换构造函数的prototype
属性,就像使用B.prototype = new A();
constructor
B
1}} A
的对象实例的属性将指向function A() {
this.a = 1;
}
function B() {
someEl.innerHTML(this.a);
}
B.prototype = new A();
B.prototype.constructor = B; // restore the `constructor` property
var foo = new B;
foo.constructor === B; // true
。
通常建议您恢复该属性,例如:
{{1}}
看看:
答案 1 :(得分:0)
尝试:
function A() {
this.a = 1;
}
function B() {
this.prototype = new A();
someEl.innerHTML(this.A.a); //notice A.a
}
答案 2 :(得分:0)
function MyClass() {
this.initialize();
}
MyClass.prototype = {
initialize: function() { // adding a function name
this.some_var = "Blue"; // makes debugging easier
},
tell_color: function() {
alert(this.color);
},
color: "red"
}
var instance = new MyClass();
instance.tell_color();
这不是我的想法,但我不知道在哪里找到它。
答案 3 :(得分:0)
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 / setters / function references。