我的情况(为什么" test1"没有出现在警报窗口中):
var Parent=function(){
this.test1= function(){
alert("test1");
}
}
var Child=function(){
this.prototype=new Parent();
}
var test=new Child();
test.test1();
http://jsfiddle.net/c3sUM/2/(在线试用相同代码)
由于
答案 0 :(得分:4)
问题是您没有分配Child
的原型,而是在prototype
的实例中创建了一个属性Child
,指向一个实例Parent
。
var Child = function(){}; // create constructor
Child.prototype = new Parent(); // assign instance of parent to constructor's
// prototype
A similar answer可能有帮助
答案 1 :(得分:0)
使用函数声明,您的代码会更清晰:
// Parent constructor
function Parent() {}
// Methods of Parent.prototype are inherited by
// instances of parent
Parent.prototype.test1 = function() {
alert('test 1');
}
// Child constructor
function Child(){}
// Make Child.prototype an instance of Parent so
// instances inherit from Child and Parent
Child.prototype = new Parent();
// Instance inherits from Child (and hence Parent);
var child = new Child();
child.test1(); // 'test 1'
在这种情况下,在声明中使用函数表达式的唯一原因是,如果要基于某些其他逻辑动态创建构造函数。