谷歌的V8 引擎
var A = function (){};A.prototype.log = function(){
}A.log();//报错 A没有方法log此时为什么不会去搜索原型对象中的log呢?

解决方案 »

  1.   

    如果你new A了,会去找原型的,但直接操作function就不会去找,一定要用A.log可以这样
    A.log=A.prototype.log=funciton(){};
    var A = function (){};A.prototype.log = function(){
    alert("I am log");
    }var c= new A();
    c.log();
    A.log();
      

  2.   

    var A = function(){}
    Function.prototype.log = function(){
        alert('log')
    }
    A.log()注意区分Fcuntion与function
      

  3.   


    为嘛直接操作Function对象就不会去找原型呢给个理由亲、、
      

  4.   


    你直接操作Function对象,找的是Function的原型,不是你自己的原型。例子里的A是Function的一个实例。
      

  5.   


    还是不太明白你这么写。只要是函数不都有log了么、。、、
      

  6.   


    是的。看你例子里直接调用A.log么我以为你想要这效果了。找原型只会找构造函数的原型。你例子里的是去原型里找了,不过是去Function的原型里找了。像1L那样new一个C出来,再调用log,才是去A的原型里找,才不会有问题。
      

  7.   

    原型这样理解,如果有个对象C是A,那就去找A的原型。所以A的原型是在Function里找,new A的原型在A这里找。
      

  8.   

    谷歌的V8 引擎var A = function (){};A.prototype.log = function(){
    }
    应该使用var a=new A();
    a.log();
    A.prototype是一个object,这个object有log方法,而A函数没有,所以A.log()报错。
    你也可以使用A.prototype.log().
      

  9.   

    好比一个是静态方法,一个是实例方法。A.log是静态方法,用类名调用,
    A.prototype.log 是实例方法,用A的实例调用,即(new A()).log调用。