为什么原型javascript在这种情况下不起作用

时间:2012-05-28 00:22:20

标签: javascript oop inheritance prototypal-inheritance

我的情况(为什么" 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/(在线试用相同代码)

由于

2 个答案:

答案 0 :(得分:4)

问题是您没有分配Child的原型,而是在prototype的实例中创建了一个属性Child,指向一个实例Parent

instead, do this

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'

在这种情况下,在声明中使用函数表达式的唯一原因是,如果要基于某些其他逻辑动态创建构造函数。