关于call 和 apply
权威指南上的说法是:可以将call 和apply看做是某个对象的方法,通过调用方法的形式
间接调用函数;需要重点说明是 :通过call和apply 调用的 函数:具体用法---》如下:
1.先说call的用法,call可以接收两个参数,也可能不是两个;第一个参数是要调用函数的
母对象,在函数体内通过this来获得对它的引用;
function a(){
console.log(this); // 输出函数a中的this对象
}
function b(){} // 定义函数b
var obj = {name:'onepixel'}; //定义对象obj
//调用
a();//this代表window对象;
a.call;//本身是一个函数方法//window
console.log(a.call); //function call() { [native code] };
a.call(null); //window 传入null,函数中的this,指向window
a.call(undefined);//window 传入undefined,函数中的this,指向window
a.call(1); //Number 传入数值型,this指向对应的包装类型,Number
a.call(''); //String 传入字符串,this指向string 类型
a.call(true); //Boolean 传入布尔类型,this指向Boolean类型
a.call(b);//function b(){}
a.call(obj); //Object 指向obj;
//call的用法;
可以看到call()中第一个参数出入什么样的参数,this 就指向对应的包装类型;
不传参,或者参数为null,undefined 时,this指向window;
具体用法:
//call的用法;
var m = {
name:'onepixel',
say:function(){
console.log('hi,i am function m!');
},
}
function n(name){
console.log('post params:'+name);
console.log('i am '+this.name);
this.say;
}
n.call(m,'test');//post params:test
// i am onepixel
//I'm function a! 不知道为什么没有调用;
也就是说n可以通过call来调用M 中的方法;
//关于appply
//apply和call的唯一区别是第二个参数的传递方式不同,
//apply的第二个参数必须是一个数组,而call允许传递一个参数列表
//值得你注意的是,虽然apply接收的是一个参数数组,但在传递给调用函数时,
//却是以参数列表的形式传递
function f(x,y,z){
console.log(x,y,z)
}
f.apply(undefined,[1,2,3]);//1,2,3
//第一个参数传null或undedined指向window
重点://js中么有继承的概念,call和apply却可以实现;
function Animal(name,weight){
this.name = name;
this.weight = weight;
}
function Cat(){
Animal.call(this,'cat','50');
//Animal.apply(this,['cat','50']);
this.say = function(){
console.log('i am '+this.name+'myweight'+this.weight)
}
}
var cat = new Cat();
cat.say();
这段代码自己理解一下。。。。
关于call 和 apply的更多相关文章
- JS核心系列:浅谈 call apply 与 bind
在JavaScript 中,call.apply 和 bind 是 Function 对象自带的三个方法,这三个方法的主要作用是改变函数中的 this 指向,从而可以达到`接花移木`的效果.本文将对这 ...
- SQL Server-聚焦APPLY运算符(二十七)
前言 其实有些新的特性在SQL Server早就已经出现过,但是若非系统的去学习数据库你会发现在实际项目中别人的SQL其实是比较复杂的,其实利用新的SQL Server语法会更加方便和简洁,从本节开始 ...
- 利用apply()或者rest参数来实现用数组传递函数参数
关于call()和apply()的用法,MDN文档里写的非常清晰明白,在这里就不多做记录了. https://developer.mozilla.org/zh-CN/docs/Web/JavaScri ...
- 由js apply与call方法想到的js数据类型(原始类型和引用类型)
原文地址:由js apply与call方法想到的js数据类型(原始类型和引用类型) js的call方法与apply方法的区别在于第二个参数的不同,他们都有2个参数,第一个为对象(即需要用对象a继承b, ...
- JavaScript学习笔记(二)——闭包、IIFE、apply、函数与对象
一.闭包(Closure) 1.1.闭包相关的问题 请在页面中放10个div,每个div中放入字母a-j,当点击每一个div时显示索引号,如第1个div显示0,第10个显示9:方法:找到所有的div, ...
- 瞬间记住Javascript中apply与call的区别
关于Javascript函数的apply与call方法的用法,网上的文章很多,我就不多话了.apply和call的作用很相似,但使用方式有区别 apply与call的第一个参数都是一个对象,这个对象就 ...
- scope.$apply是干嘛的
开始用angular做项目的时候,一定碰到过$scope.$apply()方法,表面上看,这像是一个帮助你进行数据更新的方法,那么,它为何存在,我们又该如何使用它呢. JavaScript执行顺序 J ...
- JavaScript中的apply,call与this的纠缠
1.apply定义 apply:调用函数,并用指定对象替换函数的 this 值,同时用指定数组替换函数的参数. 语法:apply([thisObj[,argArray]]) thisObj 可选.要用 ...
- jQuery之常用且重要方法梳理(siblings,nextAll,end,wrap,apply,call,each)-(二)
1.siblings() siblings() 获得匹配集合中每个元素的同胞,通过选择器进行筛选是可选的. <body> <div><span>Hello</ ...
- JS中 call() 与apply 方法
1.方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call ...
随机推荐
- Linux下的一个图形管理工具webmin
这个工具其实我在两年前的小白时期还是经常用的,因为那时候对Linux比较陌生在为数server的时候帮了我很多工作,现在周末外面下雨,闲来无事莫名其妙的想起他来. 工具优点:最大特点是他是脚本安装 不 ...
- 移动端 css实现自适应正圆 ( 宽高随着手机屏幕宽度自适应 )
序言:应朋友要求随手写了一下移动端 css实现自适应正圆 ( 宽高随着手机屏幕宽度自适应 ) ,以备后用 LESS代码: .adaptive-circle { margin: 50px auto 0; ...
- freemarker初级教程(一)
序,freemarker是一个模板引擎 一.好处 MVC分离 易于扩展 分离可视化设计和应用程序逻辑 分离页面设计员和程序员. 处理XML和HTML都可以,可以从文本文件读取 二.
- HDOJ 3709 Balanced Number
数位DP... Balanced Number Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java ...
- ThinkPHP3.2.3 安装教程
本文以 Windows 平台为例 安装前准备:Windows操作系统的电脑,php编程环境(配置好了Apache.MySql.php).推荐wampserver. 待安 ...
- 安装 vue.js和第一个hello world
一.在自己的项目文件中使用npm下载vue npm install vue 二.在文件中引入vue.js 三.第一个hello world 注:scritpt代码必须写在html代码的下面
- MAS 移动业务整合系统
AppCan MAS是基于高性能NODEJS架构开发的企业移动后端整合系统,内置各种标准协议组件,统一移动业务前后端标准开发技术:同时通过基于策略配置的数据缓存机制,聚合业务数据并发连接不同的后端业务 ...
- 关于sql用<>不等于查询数据不对问题
平常查询数据 ' 当想要查询 不等于1 的数据的时候,一般会这样查询 ' 此处查询结果没查到所有想要的结果,如果night_flag 列数据为 null时,此行数据是查询不到的. 解决方法一: ' 解 ...
- 【转】phpcms基础内容
<?php 思路: 一.目前在企业中使用比较多的cms内容管理有如下几种: 1.dedecms 2.phpcms 二.我们选择学习v9版本的phpcms,主要有以下几点原因: 1.基于MVC模式 ...
- canvas游戏小试:画一个按方向键移动的圆点
canvas游戏小试:画一个按方向键移动的圆点 自己对canvas,但又有一颗做游戏的心TT.然后记录一下对canvas的学习吧,用一个按方向键控制的小圆点来做练习.(编程时用了一些es6的语法) ...