js中this的四种使用方法
0x00:js中this的四种调用模式
1,方法调用模式
2,函数调用模式
3,构造器调用模式
4,apply、call、bind调用模式
0x01:第一种:方法调用模式 (也就是用.调用的)this就是这个对象本身
当一个函数被保存为对象的一个属性时,我们称它为一个方法,当一个方法被调用时,this被绑定到该对象,如果一个调用表达式包含一个属性表达式(即一个.点表达式或者[subscript]下标表达式)那么它被当做一个方法调用.
var myObject = {value:;increment:function(inc){this.value + = typeof inc === 'number'?inc:;}}myObject.increment();document.writeln(myObject.value);//1myObject.increment();document.writen(myObject.value;)
0x02:第二种:函数调用模式
当函数并非一个对象的属性时,那么它被当做一个函数来调用:
var sum = add(,);
//给myObject增加一个double方法myObject.double = function(){that = this;var helper = function(){that.value = add(that.value,that.value);}helper();以函数的形式来调用helper}//以方法的形式来调用doublemyObject.double();document.wtiten(myObject.getValue());//6
0x03:第三种:构造函数调用模式
var Class = function(){this.value = ;}var class = new Class();console.log(class.value); //100
我们通过new关键字来调用构造函数,此时this会绑定在该新对象上(也就是这个实例对象上)
0x04:第四种:apply和call以及bind的调用模式:指定绑定对象
var myObject = {value:};var foo = function(){console.log(this);};foo(); //globalfoo.apply(myObject);//{value:100}foo.call(myObject);//{value:100}var newFoo = foo.bind(myObject);newFoo(); //{value:100}
apply()方法接受两个参数第一个是函数运行时的作用域,另一个是参数的数组(arguments)
call()方法第一个参数与apply是一样的,第二个参数需要一个个列举出来
call方法更接近我们平时调用函数,而apply需要我们传递 Array形式的数组做为参数,它们是可以相互转换的
js中this的四种使用方法的更多相关文章
- 【温故知新】——原生js中常用的四种循环方式
一.引言 本文主要是利用一个例子,讲一下原生js中常用的四种循环方式的使用与区别: 实现效果: 在网页中弹出框输入0 网页输出“欢迎下次光临” 在网页中弹出框输入1 网页输出“查询中……” 在 ...
- JS 中深拷贝的几种实现方法
JS 中深拷贝的几种实现方法1.使用递归的方式实现深拷贝 //使用递归的方式实现数组.对象的深拷贝 function deepClone1(obj) { //判断拷贝的要进行深拷贝的是数组还是对象,是 ...
- stl中map的四种插入方法总结
stl中map的四种插入方法总结方法一:pair例:map<int, string> mp;mp.insert(pair<int,string>(1,"aaaaa&q ...
- js中this的四种调用模式
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- JS中常见的几种继承方法
1.原型链继承 // 1.原型链继承 /* 缺点:所有属性被共享,而且不能传递参数 */ function Person(name,age){ this.name = name this.age = ...
- js中index()的四种经典用法(转https://blog.csdn.net/superit401/article/details/51726826)
<!doctype html><html lang="en"> <head> <meta charset="UTF-8" ...
- js中index()的四种经典用法111
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- JS中this的四种用法
1.在一般函数方法中使用 this 指代全局对象 2.作为对象方法调用,this 指代上级对象 3.作为构造函数调用,this 指代new 出的对象 4.apply 调用 ,apply方法作用是改变函 ...
- JS中 this 的四种用法
1.在一般函数中使用 this 指全局对象 window function fn(){ this.x = 1 } fn(); //相当于window.fn() 2.作为对象方法使用 this 指该对象 ...
随机推荐
- SQL PROMPT5.3.4.1的一些设置选项
SQL PROMPT5.3.4.1的一些设置选项 我使用的是5.3.4.1版本 sql prompt这个工具安装好之后就可以在SSMS里使用代码提示功能 园子里非常多的文章:例如SQLSERVER开发 ...
- 常用封装--Date篇--获取格式化的日期对象
虽然日期对象可以使用new Date()来获取,但是对于其格式却必须进行相应的转换,才能成为开发者想要的格式. 这里提供了一个封装的方法,通过结合正则表达式的使用,达到了可以对时间对象进行处理,生成多 ...
- poj2121--暴力解法
#include<iostream> #include<string> using namespace std; ]={"negative","z ...
- ajax重复提交到相同url时出现的问题
如 $.ajax({ url : url, success : function(ret) { if (!noProgress){cniia.closeProgress();} i ...
- Octopress创建GitHub Pages——基于代码托管的静态博客
Github Pages是静态网页来的,官方也半认可了它的博客用途,代码挂在github上,随时都可以更改,算是不错的一种尝试,因为它是静态的,所以在表现上会自由得多,但是,同样因为它是静态的,管理上 ...
- getElementByID、getElementsByName、getElementsByTagName实例详解
getElementByID.getElementsByName.getElementsByTagName实例详解 本文通过实例,详细介绍了getElementByID.getElementsByNa ...
- struts2笔记08-初识ActionSupport
1.配置一个最简单的action <action name="simple-action"> <result>/simple.jsp</result& ...
- byte与sbyte的转换
C#实现byte与sbyte的转换 byte[] mByte; sbyte[] mSByte = new sbyte[mByte.Length]; ; i < mByte.Length; i++ ...
- 不能取组织ID
应用 Oracle Purchasing 层 Level Function 函数名 Funcgtion Name PO_POXBWVRP 表单名 Form Name POXBWVRP 说明 Des ...
- 未能从文本"Template"创建 "System.Windows.DependencyProperty"
XXXXProperty = DependencyProperty.Register("XXXX", typeof(double), typeof(MyClass), new Pr ...