【JavaScript 6连载】四、apply和call的用法
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>04-apply和call方法</title>
	<script>
// apply和call方法 
		// 作用:可以设置函数的具体调用者,来修改函数的作用域
		// 第一个参数:就是指的是函数的调用者
		var color = 'green';
		var getColor = function(){
			var color = 'blue';
			console.log(color);
			console.log(this.color);
		}
		// getColor();
		// window.getColor();
		// getColor.apply(this);
		// getColor.call(this);
var obj1 = {
			color:'yellow'
		};
		// 相当于obj1来调用getColor
		// getColor.apply(obj1);
		// getColor.call(obj1);
var obj2 = {
			color:'red',
		}
		// 把getColor这个函数赋给obj2对象的属性abc
		// 如果obj2中有abc属性,那么下面的语句会修改abc属性,如果obj2中没有abc属性,那么就为obj2添加一个abc属性
		obj2.abc = getColor;
		// 调用obj2的abc属性
		// obj2.abc();
function sum (num1,num2){
			return num1 + num2;
		}
var result1 = sum(1,2);
		// console.log(result1);
		// apply方法传递调用函数的参数,需要使用数组,或者是类数组
		var result2 = sum.apply(this,[1,2]);
		console.log(result2);
function callSum (num3,num4){
			return sum.apply(this,arguments);
		}
		var result3 = callSum(2,3);
		console.log(result3);
// call方法传递调用函数的参数,是要一个一个的把实参传递进去
		var result4 = sum.call(this,5,8);
		console.log(result4);
// 总结:apply和call方法:
		// 第一个参数类似,之后的参数不同。
</script>
</head>
<body>
</body>
</html>
实例二:
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>创建对象</title>
</head>
<body>
</body>
	<script>
var xiaoming = {
			name:"小明",
			desc:function(v1, v2){
				console.log("我叫"+this.name+v1+v2);
			}
		}
		var xiaogang = null;
		xiaogang = {};
		xiaogang.name = "小刚";
xiaoming.desc("xxxx", "yyyyy");
		// call/apply可以改变方法或者函数的调用者,method/functon.call(调用者,var1,var2,var3.....)
		xiaoming.desc.call(xiaogang, "aaaa", "bbbb");
		xiaoming.desc.apply(xiaogang, ["iiii", "jjjj"]);
// 一个正常的构造器
		function Person(name, age) {
			this.home = "保护地球,人人有责!";
			this.name = name;
			this.age = age;
			this.desc = function(){
				console.log(this.name+" "+this.age+" "+this.home);
			}
		}
var p1 = new Person("小红", 20);
		p1.desc();
function Student() {
			// Person.call(this, "小军", 22);
			// Person.apply(this, ["小军", 22]);
			Person.apply(this, arguments)
			this.school = "青云学院";
			this.study = function(){
				console.log(this.name+"在"+this.school+"学习WEB前端编程技术!");
			}
			// this.desc = function(){
			// 	console.log(this.name+"在"+this.school+"学习WEB前端编程技术!");
			// }
		}
		var st1 = new Student("小军", 22);
		st1.desc();
		st1.study();
</script>
</html>
【JavaScript 6连载】四、apply和call的用法的更多相关文章
- Javascript中call和apply的区别和用法
		JavaScript中有一个call和apply方法,其作用基本相同,但也有略微的区别.其实就是更改对象的内部指针,即改变对象的this指向的内容.这在面向对象的js编程过程中有时是很有用的.call ... 
- javascript中call()、apply()、bind()的用法终于理解
		其实是一个很简单的东西,认真看十分钟就从一脸懵B 到完全 理解! 先看明白下面: 例1 obj.objAge; //17 obj.myFun() //小张年龄undefined 例2 shows( ... 
- (转)javascript中call()、apply()、bind()的用法
		其实是一个很简单的东西,认真看十分钟就从一脸懵B 到完全 理解! 先看明白下面: 例1 obj.objAge; //17 obj.myFun() //小张年龄undefined 例2 shows( ... 
- JavaScript 中 call()、apply()、bind() 的用法
		"use strict"; ; var obj = { name:'小李', age:, getInfo(from, to) { console.log(arguments) co ... 
- javascript中call()、apply()、bind()的用法理解
		一.bind的用法 第一个:obj.showInfo('arg','arg_18');中传的2个参数通过showInfo方法改变的是obj下中的name和age 第二个:obj.showInfo.bi ... 
- JavaScript框架设计(四) 字符串选择器(选择器模块结束)
		JavaScript框架设计(四) 字符串选择器(选择器模块结束) 经过前面JavaScript框架设计(三) push兼容性和选择器上下文的铺垫,实现了在某一元素下寻找,现在终于进入了字符串选择器 ... 
- Javascript函数调用的四种模式
		一 前言 Javascript一共有四种调用模式:方法调用模式.函数调用模式.构造器调用模式以及apply调用模式.调用模式不同,对应的隐藏参数this值也会不同. 二 方法调用模式 函数作为对象的属 ... 
- 学习JavaScript之this,call,apply(转)
		转自: http://www.h5cn.com/js/jishu/2016/0128/17884.html 在之前的JavaScript学习中,this,call,apply总是让我感到迷惑,但是他们 ... 
- 面试官:能解释一下javascript中bind、apply和call这三个函数的用法吗
		一.前言 不知道大家还记不记得前几篇的文章:<面试官:能解释一下javascript中的this吗> 那今天这篇文章虽然是介绍javascript中bind.apply和call函数 ... 
- JavaScript函数 bind call apply区别
		1. apply calll 在JavaScript中 call 和 apply 都是为了改变某个函数运行时上下文而存在的, 换句话说就是为了改变函数内部的this的指向. 这里我们有一个新的对象 b ... 
随机推荐
- Vue main.js 文件中全局组件注册部分
			在 \src\components\index.js 文件中export组件 import HeaderList from './HeaderList' import HeaderMenu from ... 
- 前端 HTML 标签分类
			三种: 1.块级标签: 独占一行,可设置宽度,高度.如果设置了宽度和高度,则就是当前的宽高.如果宽度和高度没有设置,宽度是父盒子的宽度,高度根据内容填充. 2.行内标签:在一行内显示,不能设置宽度,高 ... 
- 新辰:共享是SEO的思维 用户是SEO的核心
			大家都知道.SEO一直没有一个能够定义的核心.新辰知道全部的东西里面在互联网领域链接是非常重要的.所以新辰觉得做SEO就是把链接做好.因此,链接对于一个站点来说简单分能够分成两种.内部的链接和外部的链 ... 
- 如何在ASP.NET 网站项目中使用C# 6?
			作者:Generic链接:https://www.zhihu.com/question/48864375/answer/113316462来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业 ... 
- git add 所有文件
			git add 多个文件的格式介绍 git提交修改之前要add然后commit,假如我用git clone远程服务器文件到本地,然后我如果修改了其中几个文件要提交,我必须一个个的如: $git add ... 
- elasticsearch 处理index 一直INITIALIZING状态
			elasticsearch一个节点异常重启后有一个index恢复的过程中状态一直INITIALIZING 处理方法 PUT index_name/_settings { "index&quo ... 
- 【LeetCode每天一题】3Sum(三数之和)
			Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? Find ... 
- JS 8-5 OOP 实现继承的方式
			function Person(){} function Student(){} Student.prototype = Person.prototype;//此继承方式是错误的,当我们改变Stude ... 
- linux git patch 和patch以及git diff 命令
			1.git log 查看commit id,修改前为id1,修改后id2 2.根据id1到id2有几次提交来生成几个patch,否则的话会根据所有节点生成很多patch 比如: commit id2 ... 
- go https json
			好吧,再来一个看起来高档点的吧 自从知道 Go有本地调用后,我就回到windows了 哈哈,以下内容,均在win10下搞定 预备:先做两个文件,服务器端的私钥KEY和公钥证书 1. openssl g ... 
