zoukankan      html  css  js  c++  java
  • this关键字

    this和context的区别

    JS中this是执行的主体(谁来执行的this就是谁),context是执行所在的范围(在哪执行的上下文就是谁) -> "this和context没有必然的关系"

    例如:张三在沙县吃饭,this->张三 context->沙县小吃;张三和沙县小吃没有必然关系;

       function 吃饭(){
            this->张三
        }
        张三.吃饭();
        ~function(){
            张三.吃饭();
        }();
    

    如何的区分this呢?

    • this:当前函数执行的主体,它和函数在哪定义的或者在哪执行的都没有任何关系;如何的区分this呢?

    1、函数执行,首先看函数名前面是否有".",有的话,"."前面是谁this就是谁;没有的话this就是window

    2、自执行函数中的this永远是window,(window去执行的,很多时候window可以省略),例如绑定定时器中的this就是window

    3、给元素的某一个事件绑定方法,当事件触发的时候,执行对应的方法,方法中的this是当前的元素(在IE6~8中DOM2绑定事件中的this是window);比如选项卡的代码中;

    	function fn() {
    		console.log(this);
    	}
    	var obj = {fn: fn};
    	fn();//this->window
    	obj.fn();//this->obj
    
    • 事件执行,不同的写法,this指向是不同的
    	document.getElementById("div1").onclick = fn;//fn中的this是#div1
    	document.getElementById("div1").onclick = function () {
    	  fn();//this->window
    	};
    	function fn() {
    	  console.log(this);
    	}
    
    
    • 不同作用域的
    	function sum() {
    	  console.log("sum",this);//this->window
    	  fn();//this->window
    	}
    	sum();
    	var oo = {
    	    sum: function () {
    	      console.log("oo.sum",this);//this->oo
    	      fn();//this->window
    	    }
    	};
    	oo.sum();
    	function fn() {
    	  console.log(this);
    	}
    你以为 你以为的 就是你以为的
    
    

    4、定时器中的this就是window

    5、构造函数中的this就是实例

    6、call、apply、bind可以强制修改this:1、非严格模式下,第一个参数不传或者传递的是null/undefined时,this=>window;2、严格模式下,第一个参数不传或者传递的是undefined,this=>undefined,如果传递的是null,this=>null。

    7、回调函数中的this一般是window本身,例如array.sort/forEach/map/map(function(){在context没有传递任何值得情况下this=>window},context)

    严格模式

    "use strict"

    1、不能使用arguments.callee和arguments.caller,并且arguments[0]=100也不再映射到第一个形参上了。
    2、不能使用argument、implents,interface等关键字作为变量名
    3、变量声明必须加var
    4、不允许对象中的属性名重复
    5、自执行函数中的this是undefined。
    6、方法执行,看方法名前面是否有".",有的话,"."前面是谁this就是谁,没有的话this就是undefined。没有写主体,在严格模式下,this指向undefined。

  • 相关阅读:
    组件
    Django
    面向对象
    异常处理
    模块1
    Java中权限设置
    java反射机制
    JavaScript提高篇之面向对象之单利模式工厂模型构造函数原型链模式
    JavaScript提高篇之预解释作用域以及this原理及其应用
    js-引用类型-Array
  • 原文地址:https://www.cnblogs.com/Juphy/p/6952730.html
Copyright © 2011-2022 走看看