首页 > 代码库 > [基础]javascript----this

[基础]javascript----this

《javascript高级程序设计》的摘抄

Ps:很好的一本书,大家可以直接去看书,这里只是记录。推荐一个计算机电子书网站: 皮皮书屋

查资料:MDN,W3CSCHOOL,google


 

  • 匿名函数的执行环境具有全局性,所以 this 指向window
  • 函数被调用,其活动对象都自动获得两个特殊变量: thisarguments
  • call() 、apply()、bind() 指向其指定的对象

this:函数的调用方式决定了this的值

----在Global context 全局上下文

              指向window,“use strict”模式下指向undefined

 

 

---------------------------

一句话,this由所在运行时上下文环境决定,运行时上下文环境是谁,this就指向谁

function a( ){    return this  }

a函数是在全局环境下

a()       //等价与下面window.a()

所以this指向window

------------

var name= "The Window";var object ={    name: "My Object",    getNameFunc: function(){        return function(){            return this.name;  //匿名函数,闭包          };    }};alert(object.getNameFunc()()); //The Window

object.getNameFunc()返回的是匿名函数,因为匿名函数的执行环境具有全局性,所以this指向window

-------------------

var name= "The Window";var object ={    name: "My Object",    getNameFunc: function(){
     var that =this
return function(){ return that.name; //匿名函数,闭包 }; }};alert(object.getNameFunc()()); //The Object

var that = this ,this是object环境中的,所以this指向object,这很明显,所以that.name也是指向object.name

----------------

var o = {prop: 37};function independent() {  return this.prop;}o.f = independent;    //o.f =window.independent 指向同一函数,但运行时不同,一个是o,一个是windowconsole.log(o.f()); // logs 37

//等价于
var o = {prop: 37};
o.f = function(){
  return this.prop
}
console.log(o.f()); // logs 37
所以很明显this是在o的环境中,所以this指向o


--------------------------

var name= "The Window";var object ={"name": "My Object"};console.log(    (object.getName=function(){   //匿名函数赋值,并执行,所以指向window        return this.name;    })());   //This Window console.log(object.getName());  //My object

 

有种C指针的感觉,脑子里是一个个有向的箭头,想箭头的另一端,就知道this指向谁了

---------------------------------------------------------------------------------------------------------------

1 var name = "The Window";2 3 var object = {4     name: "My object",5     getName: function(){6         return this.name7     }8 }9 (object.getName = object.getName)( );  //The Window
  1. 第9行在Chrome会出现

    Uncaught TypeError: Cannot read property ‘getName‘ of undefined 

    而IE11下没问题,为什么????

 

[基础]javascript----this