js中的this
来源:互联网 发布:linux用户忘记密码 编辑:程序博客网 时间:2024/06/05 04:08
//this//1、如果是普通方法,this指向window,准确的说是this指向null被解释到window,在ECMASCRIPT5,如果this为null,则解释成undefinedfunction t(){ this.x = 1;}console.log(window.x) // 1//2、作为对象方法来调用,this指向该对象var obj = {xx:11,t:function(){ console.log(this.xx)}} //11//作为方法调用时,方法是引用类型,方法在内存方法快,哪个对象的属性指向它,它内部返回的就是哪个对象var dog = {xx:'wangwang'}dog.t = obj.tdog.t() //wangwang//3、作为构造函数调用时function Cat(name,age){ this.name = name this.age = age this.bark = function(){ alert('I am ' + this.name + '!') }}var cat = new Cat('虎子',2);/*a、系统创建空对象{},(空对象constructor属性指向Cat函数)b、把函数的this-->指向-->该对象c、执行该函数d、返回该对象[注意]:如果函数作为构造函数运行时,return的值是忽略的,返回的还是对象*///4、函数被call、apply调用//4.1 call语法格式:函数.call(对象,参数1,参数2,...参数N)function t(num){ console.log('我的真实年龄是'+this.age+'岁,但我一般告诉别人我'+(this.age + num)+'岁')}// human.t = t// human.t(-10)//等价于上面注释的var human = {name:'李四',age:20}t.call(human,-5) //临时指向,动态将一个函数绑定到一个对象上并立即执行//4.2 apply语法/*obj.call(thisObj, arg1, arg2, ...); obj.apply(thisObj, [arg1, arg2, ...]);两者作用一致,都是把obj(即this)绑定到thisObj,这时候thisObj具备了obj的属性和方法。或者说thisObj『继承』了obj的属性和方法。唯一区别是apply接受的是数组参数,call接受的是连续参数。function add(j, k){ return j+k;}*/function sub(j, k){ return j-k;}add.call(sub, 5, 3); //8add.apply(sub, [5, 3]); //8sub(5, 3); //2sub.call(add, 5, 3); //2sub.apply(add, [5, 3]); //2通过call和apply,我们可以实现对象继承。示例:var Parent = function(){ this.name = "yjc"; this.age = 22;}//除了给对象动态绑定方法,还能继承var child = {};console.log(child);//Object {} ,空对象Parent.call(child);console.log(child); //Object {name: "yjc", age: 22}//5、with使用// 5.1 with 语句可以方便地用来引用某个特定对象中已有的属性,但是不能用来给对象添加属性。要给对象创建新的属性,必须明确地引用该对象, 去除了多次写对象名的麻烦//举例function Lakers() { this.name = "kobe bryant"; this.age = "28"; this.gender = "boy";}var people=new Lakers();with(people){ var str = "姓名: " + name + "<br>"; str += "年龄:" + age + "<br>"; str += "性别:" + gender; document.write(str);}//代码执行效果如下://姓名: kobe bryant//年龄:28//性别:boy//练习1:var name='i am window'var obj = {name:'php',t:function(){console.log(this.name)}}var dog = {name:'huzi'}var tmp = obj.ttmp()//i am windowdog.t = obj.tdog.t() //huzidog.t.call(obj) //php(dog.t = obj.t)()//报错dog.t(...) is not a function,dog.t = obj.t的返回值是“值”,即t函数.强调的是值,说明不是通过引用来的调用,//而是立即使用函数本身,效果等同于(function(){alert(this.name)})(),null又被解释成widnow//练习2:/* 问:有一些有经验的,但对js理解不深的程序员说,有this操作的(如this.age=xx)函数不能直接调用,而是要new来调用,为什么? 答:因为直接调用,this只想的window将会污染全局变量*/
阅读全文
0 0
- js中的this
- js中的this关键字
- 关于js 中的 this
- js中的this详解
- js 中的this
- JS中的this
- JS中的this用法
- js中的this基础
- JS中的this关键字
- 在js中的this
- 【JS】JavaScript中的this
- js中的this
- js 中的this
- js中的this
- JS中的this理解
- js中的this
- JS中的this
- js中的this指针
- wincc新手之路-安装与授权
- HYSBZ-1853 幸运数字(容斥原理,dfs)
- Maven_Spring_Ehcache 实例
- javascript面向对象——几种常见的设计模式
- 使用LinearLayout做到充满并两端对齐显示
- js中的this
- python面向对象小细节
- ADO和ADO.NET的区别(数据访问角度)
- CGContextRef画不完整的圆
- c语言-求两圆交点
- UVA11374[Airport Express] dijkstra/spfa+枚举
- TCP 三次握手
- 第一届机电汇产业联盟供需对接会成功举办
- 利用XGboost简单粗暴zillow竞赛25%