js 中 this的探讨

来源:互联网 发布:玩客云官网抢购软件 编辑:程序博客网 时间:2024/04/25 18:24

function中的this在没有调用的时候只是一个符号,不代表任何对象。只有当调用的时候才会产生一个内部对象,然后将内部对象的引用指针传递给对象实力。
如对象创建的方法: 

function ClassA(){
this.b='test';
return this;           //this在没有用行时只是一个符号;在调用时this才会检查这个调用的引用。
}
var a = ClassA();      //window.ClassA();    此时只是把内部对象的指针传递a。相当已window调用ClassA(),故此时this为window,
alert(a==window)    //true

var b=new ClassA();   //通过new newclass()执行,由于new的内部机制,会先创建一个对象,指向this,再将该对象的引用返回
alert(b==ClassA)   //true

classA.prototype.c = 'd';
alert(a.c);         //undefined,a为window对象,内部没有c变量
alert(b.c);        //d


在prototype中,多次用到了下面这种写法: 
如: 
var Class = {
   create: function() {
     return function() {
       this.initialize.apply(this, arguments);
     }
   }
}
这里是返回一个函数对象,此时函数对象没有调用着。当创建一个对象后
var class=Class.create(); 此时得class只不过是一个函数对。
当用到
var obj=new class时,this才有了引用,指向当前得对象实例。

再看下面得例子: 

Function.prototype.bind = function() {
   var __method = this,   // 这里的this表示bind方法的调用者, 是一个函数对象

    args = $A(arguments), object = args.shift();
   return function() {
     return __method.apply(object, args.concat($A(arguments)));
   }
}

原创粉丝点击