JS this关键字

this是Javascript语言的一个关键字。

它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用。比如,

  function test(){

    this.x = 1;

  }

随着函数使用场合的不同,this的值会发生变化。但是有一个总的原则,那就是this指的是,调用函数的那个对象。

下面分四种情况,详细讨论this的用法。

情况一:纯粹的函数调用

这是函数的最通常用法,属于全局性调用,因此this就代表全局对象Global。

请看下面这段代码,它的运行结果是1。

  function test(){

    this.x = 1;

    alert(this.x);

  }

  test(); // 1

为了证明this就是全局对象,我对代码做一些改变:

  var x = 1;

  function test(){

    alert(this.x);

  }

  test(); // 1

运行结果还是1。再变一下:

  var x = 1;

  function test(){

    this.x = 0;

  }

  test();

  alert(x); //0

情况二:作为对象方法的调用

函数还可以作为某个对象的方法调用,这时this就指这个上级对象。

  function test(){

    alert(this.x);

  }

  var o = {};

  o.x = 1;

  o.m = test;

  o.m(); // 1

情况三 作为构造函数调用

所谓构造函数,就是通过这个函数生成一个新对象(object)。这时,this就指这个新对象。

  function test(){

    this.x = 1;

  }

  var o = new test();

  alert(o.x); // 1

运行结果为1。为了表明这时this不是全局对象,我对代码做一些改变:

  var x = 2;

  function test(){

    this.x = 1;

  }

  var o = new test();

  alert(x); //2

运行结果为2,表明全局变量x的值根本没变。

情况四 apply调用

apply()是函数对象的一个方法,它的作用是改变函数的调用对象,它的第一个参数就表示改变后的调用这个函数的对象。因此,this指的就是这第一个参数。

  var x = 0;

  function test(){

    alert(this.x);

  }

  var o={};

  o.x = 1;

  o.m = test;

  o.m.apply(); //0

apply()的参数为空时,默认调用全局对象。因此,这时的运行结果为0,证明this指的是全局对象。

如果把最后一行代码修改为

  o.m.apply(o); //1

运行结果就变成了1,证明了这时this代表的是对象o。

情况五 函数调用模式(函数内部调用自身)

myObject.double = function(){
    var that = this; //解决方案
    var helper = function(){
        that.value = add(that.value,that.value);
    };
    helper();//以函数的形式调用helper,注意,如果this不赋值给that,则这个helper()函数调用里的this指  向windows,即全局变量。
};
//以方法的形式调用double
myObject.double();

时间: 2024-10-29 19:06:23

JS this关键字的相关文章

js strict 关键字

strict strict模式,JavaScript在设计之初,为了方便初学者学习,并不强制要求用var申明变量.这个设计错误带来了严重的后果:如果一个变量没有通过var申明就被使用,那么该变量就自动被申明为全局变量. 在同一个Web页面的不同的JavaScript文件中,如果都不用var申明,恰好都使用了变量i,将造成变量i互相影响,产生难以调试的错误结果. 使用var申明的变量则不是全局变量,它的范围被限制在该变量被申明的函数体内,同名变量在不同的函数体内互不冲突. 为了修补JavaScri

js return关键字

js return关键字: 加减法demo: 总结return关键字的作用: js函数中return 关键字的作用和后端return的作用几乎一致: 1.返回函数执行的结果 2.结束函数的运行 3.组织默认行为 原文地址:https://www.cnblogs.com/yingxiongguixing/p/11650794.html

js模糊搜索关键字高亮显示,将字体变成红色

//搜索键关键字变色 var nWord = "${guanj}"; //获取el表达式冲文本框输入的关键字 var array = nWord.split(""); //分割 var dsa=document.getElementsByName("dsas");//获取全部商品 for ( var t = 0; t < dsa.length; t++) { for ( var i = 0; i < array.length; i++

js基础 1.简单js 语法 关键字 保留字 变量

简单js JavaScript 是一个松散性的语言 对象属性却不想c中的结构体或者c++ 和java的对象, 对象继承机制 使用原型的prototype(原型链),js的分为三部分ECMAScript .文档DOM对象.浏览器BOM对象 1. 核心(ECMAScript) (语法.类型.语句.关键字.保留字.操作符.对象等)Ie6.7.8 第三版(ECMA-262) 兼容 2.文档对象 dom(ie6-7 基本都dom 一级(基本操作都可以),) 3.浏览器对象模型 BOM (控制浏览器显示无标

js 中关键字 this的用法

<1>  js中this 的用法?  (key:函数是由调用的,四种情况标红可知) (http://www.ruanyifeng.com/blog/2010/04/using_this_keyword_in_javascript.html) this 关键字指的是函数在运行时,自动生成的内部对象,只能在函数内部使用,随着函数使用场合的变化this 的值也会发生变化,但是总原则是,this指的是调用函数的那个对象   =>范围:函数内部    对象:调用函数的那个对象 this使用的四种情

ASP.NET给前端动态添加修改 CSS样式JS 标题 关键字

有很多网站读者能换自己喜欢的样式,还有一些网站想多站点共享后端代码而只动前段样式,可以采用动态替换CSS样式和JS. 如果是webform 开发,可以用下列方法: 流程是首先从数据中或者xml读取数据,然后赋值给前端页面 HTML <meta> 标签添加 HtmlMeta mtdes = new HtmlMeta();//新建实例 mtdes.Name = "Description";//标签 mtdes.Content = this.Descriptionp;//内容 H

js 查找关键字

查找:4种: 1. 查找固定关键字,仅返回位置,可指定开始位置: var i=str.indexOf("kword"[,starti]); str.lastIndexOf("kword"[,starti]); 何时使用:关键字确定,通过循环,反复获得每个关键字的位置 2. 只判断有没有:var i=str.search(reg); 返回值:找到返回i,没找到返回-1 3. 获取*所有*关键字的内容:var kwords=str.match(reg); g 返回值:找

JavaScript高级程序设计(五): js的关键字instanceof和typeof使用

JavaScript中instanceof和typeof 常用来判断一个变量是否为空,或者是什么类型的.但它们之间还是有区别的: 一.typeof 1.含义:typeof返回一个表达式的数据类型的字符串,返回结果为js基本的数据类型,包括number,boolean,string,object,undefined,function.语法为typeof(data) 或 typeof data. 我们可以使用typeof来获取一个变量是否存在,如: if(typeof a!='undefined')

[js]this关键字代表当前执行的主体

点前是谁,this就是谁 <div id="div1" class="div1"></div> <div id="div2" class="div2"></div> <script> /* this代表当前执行函数的主体.js中context代表当前执行函数的环境 - 1,和在哪定义的没关系 - 2,和执行环境没关系 - 3,仅和谁在执行(执行主体)有关系 */ //