函数在创建的时候会带有一个prototype属性
该函数的prototype属性值指向的是当前函数本身么?
该函数的prototype属性值是当前函数的对象?如果是的话
var a = function(){
  alert(typeof this.prototype);//undefined 为何不是object
};

解决方案 »

  1.   

    var a = function(){
    alert(this);
    alert(typeof this.prototype);//undefined 为何不是object
    };
    a();
    alert(window.prototype);
    alert(a.prototype);希望你能理解this
      

  2.   


    楼主神速~!多谢解答
    还有个以为如果:有点小迷惑
     var a = function(){
                alert(this);//指向windows
                alert(typeof a.prototype);//object 返回的是当前函数对象
            };
    this不是指向调用该函数的对象吗?
      

  3.   

    对啊 调用该函数的对象是window啊~~~
    a只是函数的名。而非调用者啊
      

  4.   

    window.a(); == a();~ 谢谢
      

  5.   

    prototype是一个函数的原型;什么是“原型”你可以把原型看做一个函数的“根”,函数的很多特性都是继承这个根而来的;
    比如我们在全局环境下创建了一个函数:var Demo=function(){};   //定义Demo函数此处我们定义叫做Demo的函数,那么这个是后他的prototype属性也被定义了,默认的情况下他是JavaScript内置类Object的一个实例,我们可以这样来验证它://(true)判断Demo.prototype 是不是Object的一个实例;
    alert(Demo.prototype instanceof Object); //true有实验我们可以得出函数的prototype属性默认情况下指向的是Object类的一个实例;
    继续刚才的函数Demo此处我们虽然定义的是一个函数,但是同时我们也定义了一个JavaScript的类,因为我们也可以这样使用Demo:var objDemo=new Demo();
    alert(typeof objDemo.toString);//function我们声明了Demo的一个实例名字为:objDemo,我并没有为他定义任何的成员,但是当我执行:alert(typeof objDemo.toString);//function却显示“function”而不是“undefined”,说明objDemo有这个方法;但是它是从哪里来的呢?答案是从Demo的prototype属性中继承的;
    这时你可能会有所启发,那么我们演示一下在JavaScript中的继承吧://定义父类;
    var father=function()
    {
    this.name="father";
    };//定义子类;
    var son=function(){};//改变子类的原型(根)为父类的一个实例(原本是Object的实例);
    son.prototype=new father();//声明了子类的一个实例;
    var sonDemo=new son();//显示从父类中继承的name属性;
    alert(sonDemo.name);    //father
    那么接下来sonDemo是否任然有toString的方法呢,为什么(留给你来思考)?
    由于this的讲解需要另外的一个篇幅这里先回答你的prototype问题;希望对你有帮助!