js之this用法

javascript中有一个知识点this   我们先看一个小程序

var  x=10;

var obj={

   x:100,

  show:function foo(){

    console.log(this.x);

  }

}

var showx=obj.show;

showx();//10

看到这大家是不是觉得应该是100的,那么在看看下面稍作修改的程序:

var  x=10;

var obj={

   x:100,

  show:function foo(){

    console.log(this.x);

  }

}

obj.show();//100

这就是this的神奇之处,很多人都会搞错,下面咱们一起看看this的用法,大致有四种:

一,作为普通函数调用

我们知道, 在函数执行代码之前会初始化自己的作用域, 此时就有两个重要的角色生成, 一个是 this ,另一个是
‘arguments‘, 我们这次只讨论 this , 如果仅仅是函数的调用, 此时的 this 是指向 window 对象, 在严格模式下 this 是
undefined

(function() {console.log(this === window);}()); // true;
(function() {‘use strict‘; console.log(this === undefined);}()); //true

二,作为构造函数调用

当我们使用 new 操作符去调用一个对象的时候 this 指向实例化的对象, 这点比较常见, 此时最好不要去用 return 出一
个引用类型的值去替代 this 返回

function test(){

    this.x = 1;

  }

  var o = new test();

  alert(o.x); // 1

三,作为对象的方法调用
在定义对象的时候, 如果某个键的值是 Function 类型我们称这样的键是方法, 当对象调用自己的方法时, 该方法内部的
this 便指向了对象自己

function test(){

    alert(this.x);

  }

  var demo= {};

  demo.x = 1;

  demo.m = test;

  demo.m(); // 1

这个程序相当于

var demo={

  x:1,

  m:function test(){

    alert(this.x)

  }

}

demo.m();//1

四,当调用apply, call, bind 时
这三种调用方式对 this 的影响是一样的, this 的具体指向和传入的第一个参数有关, 非严格模式下程序执行的时候会
对第一个入参进行一个类型转换, js 尝试将其转换成其对应的包装类型, 如果转化失败 this 就指向 window , 严格模式
下不进行转换, this 指向传入的第一个参数,如果用的是bind时,this就已经指定了,

let foo = function() {
console.log(this);
};
let obj = { a: 1 };
let bar = foo.bind(obj);
let oth = bar.bind({});
bar(), oth(); // {a: 1} {a: 1}

this的大致用法就这四种,可能还有其他的用法,如果有更好的用法可以联系我哦,我也可以及时作出修改

时间: 2024-12-22 16:30:10

js之this用法的相关文章

JS Replace() 高级用法(转)

在很多项目中,我们经常需要使用JS,在页面前面对前台的某些元素做做修改,js 的replace()方法就必不可少. 经常使用"ABCABCabc".replace("A","B")的同学应该会比较清楚,改语句的最终结果是BBCABC,这种方法只能替换 第一个匹配的元素.如果替换所有呢?使用正则表达式即可: "ABCABCabc".replace(/A/g,"B") 即可. 那如果想替换A的同时也可以替换a呢

js事件监听器用法实例详解

本文实例讲述了js事件监听器用法.分享给大家供大家参考.具体分析如下: 1.当同一个对象使用.onclick的写法触发多个方法的时候,后一个方法会把前一个方法覆盖掉,也就是说,在对象的onclick事件发生时,只会执行最后绑定的方法.而用事件监听则不会有覆盖的现象,每个绑定的事件都会被执行.如下: window.onload = function(){  var btn = document.getElementById("yuanEvent");  btn.onclick = fun

js事件监听器用法实例详解-注册与注销监听封装

本文实例讲述了js事件监听器用法.分享给大家供大家参考.具体分析如下: 1.当同一个对象使用.onclick的写法触发多个方法的时候,后一个方法会把前一个方法覆盖掉,也就是说,在对象的onclick事件发生时,只会执行最后绑定的方法.而用事件监听则不会有覆盖的现象,每个绑定的事件都会被执行.如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 window.onload = function(){   var btn = document.getElementById("yuanEv

video.js的简单用法

今天项目中需要跨浏览器地播放视频,在网上找了一下,找到了video.js,记录一下video.js的简单用法. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 <html> <head> ... <!-- 引入vide

jquery.validate.js插件的用法

最近做项目,需要用到 jQuery.validate.js插件,于是记录一下工作中的一些经验,以便日后学习. [例子如下] 1.前台页面 <form id="form1" method="post"> 用户名:<input type="text" id="UserName" name="UserName" /><!--<span id="name_error&q

js中prototype用法(转)

JavaScript能够实现的面向对象的特征有:·公有属性(public field)·公有方法(public Method)·私有属性(private field)·私有方法(private field)·方法重载(method overload)·构造函数(constructor)·事件(event)·单一继承(single inherit)·子类重写父类的属性或方法(override)·静态属性或方法(static member) 例子一(JavaScript中允许添加行为的类型):可以在

JS中括号的用法

转自:http://blog.csdn.net/hongmin118/article/details/4584023 我们在一些JS代码中经常可以看到这样的用法 :(function(){})();那这些括号是做什么用的呢?下面我们来测试一下就知道了 (function(){alert('zol');});运行后,没有反映(相当于第一函数) (function(){alert('zol');})();运行后,弹出 zol (function(){alert('zol');})(alert('wi

JS Date()函数用法

转载:http://blog.csdn.net/icanlove/article/details/21989339 JS Date 对象用于处理日期和时间.创建 Date 对象的语法:var myDate=new Date()Date 对象会自动把当前日期和时间保存为其初始值.参数形式有以下5种: new Date("month dd,yyyy hh:mm:ss");new Date("month dd,yyyy");new Date(yyyy,mth,dd,hh,

关于JS中&amp;&amp;和||用法技巧

在javascript中经常遇到&&和||运算符的使用,下面我们看看它们的用法技巧: &&和||在JQuery源代码内尤为使用广泛,由于本人没有系统的学习js,所以只能粗略的自我理解出来,希望大家指点下. 粗略理解如下: a() && b() :如果执行a()后返回true,则执行b()并返回b的值:如果执行a()后返回false,则整个表达式返回a()的值,b()不执行: a() || b() :如果执行a()后返回true,则整个表达式返回a()的值,b