Javascript中的var self = this
2016-02-28 12:30
597 查看
javascript中每个函数解析时,都会创建两个特殊的变量:**this**和**arguments**,这两个变量都能在函数体内访问,所以每个函数都有属于自己的this对象和arguments
当然这个this对象是在执行时基于函数的执行环境绑定的,
即在全局对象中,this指向的是window对象;在自定义函数中,this对象指向的是调用这个函数的对象;
var wsscat = function(name){ var self = this; this.name = name; console.log(this); console.log(self); } wsscat('wsscat'); window.wsscat('wsscat');//因为它在window对象下执行的 var objThis = { x:'autumns', wsscat:wsscat }
下面这个函数执行的时候,第一个this指向的就是window对象,因为它在window环境下执行的,第二个this对象指向的是objThis对象,因为它在objThis对象下执行的
objThis.wsscat();//因为它在objThis对象下执行的
当我们把这个构造函数变成对象的时候,这个this就是指向自己的wsscat对象
var wsscat = function(name){ var self = this; this.name = name; console.log(this); console.log(self); } ////通过构造函数new一个新对象时,this就指这个新对象 var obj = new wsscat('wsscat');//log wsscat{name:'wsscat'}对象
这里给出一个私有的self参数,这个可以令对象this对私有方法func3可见,所以当我们在构造函数中出现闭包(私有函数/嵌套函数 下面例子中的function func3())都要注意,此时里面的this是属于window对象的
var wsscat = function(name){ var self = this; var x = 'autumns'; this.name = name; console.log(this); console.log(self); this.func = function(){ console.log("wsscat's func"); }; this.func2 = function(){ func3();//不能用self.func3()和this.func3() } //闭包里面,既嵌套函数里面如果想使用wsscat对象的方法或者变量要用self function func3(){ console.log(this)//指向window对象 //this.func();//报错this.func is not a function self.func();//不能用this.func(),也不能用func() console.log("wsscat's func3"); } } var obj = new wsscat('wsscat'); obj.func2()
而上面的代码中func和func2里面既可以用self也可以用this来访问wsscat本身的这个对象,因为此时的this等于wsscat这个对象,这个func是在this(即wsscat对象)下面调用的
this.func = function(){ console.log("wsscat's func"); };
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- [译] React 入门
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法
- Redux系列02:一个炒鸡简单的react+redux例子
- JavaScript 各种遍历方式详解