object.prototype.call

object.prototype.call

/*
* object.prototype.call
* @ 当一个object没有某个方法,但是其他的有,我们可以借助call或apply用其它对象的方法来操作。
* @ 语法: fun.call(thisArg[, arg1[, arg2[, ...]]])
* @ param: thisArg {object}     //当前引用对象
*   @ 不传参数,传null,undefined, this指向window对象
*   @ 传递另一个函数的函数名fun2, this指向函数fun2的引用
*   @ 传递一个对象,函数中的this指向这个对象
*   @ 值为原始值(数字,字符串,布尔值), this会指向该原始值的自动包装对象,如String,Number,Boolean
* @ param: arg1, arg2, ... {object}       // arguments参数
*/

 

call函数中的this指向

function a(){console.log(this);
}
function b(){}var objthis = {name: "Alan"};           //定义对象
a.call();               // window
a.call(null);           // window
a.call(undefined);      // window
a.call(1);              // Number {[[PrimitiveValue]]: 1}
a.call("");             // String {length: 0, [[PrimitiveValue]]: ""}
a.call(true);           // Boolean {[[PrimitiveValue]]: true}
a.call(b);              // function b(){}
a.call(objthis);        // Object {name: "Alan"}

 

使用call对象的构造函数链

function Product(name, price){this.name = name;this.price = price;if(price < 0){throw RangeError('Cannot create product ' + this.name + ' with a negative price');}
}// call方法
function Food(name,price){Product.call(this,name,price);this.category = "food";
}// 等同于
function Food(name,price){this.name = name;this.price = price;if(price < 0){throw RangeError('Cannot create product ' + this.name + ' with a negative price');}this.category = "food";
}

 

使用call调用匿名函数

var animals = [{species: "Lion",name: "king"},{species: "Whale",name: "Fail"}
]for(var i = 0; i < animals.length; i++){(function(i){this.print = function(){console.log("#" + i + " " + this.species + ": " + this.name);}this.print();}).call(animals[i],i);// 等同于/*(function(){this.print = function(){console.log("#" + i + " " + animals[i].species + ": " + animals[i].name);}this.print();})();*/
}

 

使用call调用函数的上下文this

function greet(){var reply = [this.person, "Is An Awesome", this.role].join(" ");console.log(reply);
}var obj = {person: "Douglas Crockford", role: "Javascript Developer"
};greet.call(obj);

 

以DOM为例子

function changeStyle(attr, value){this.style[attr] = value;
}
var box = document.getElementById('box');
window.changeStyle.call(box, "height", "200px");
window.changeStyle.apply(box, ['height', '200px']);

 

// 不用call 

function say(name){console.log(this + "," + name);}say.call2 = function( thisObj, arg1 ) {thisObj = new Object( thisObj );thisObj.say = this;return thisObj.say(arg1);};say.call2("hola","Mike");

 

转载于:https://www.cnblogs.com/alantao/p/5882411.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/418075.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BLOB数据类型、事务

Blob数据类型&#xff1a; 事务&#xff1a;

资源整理

资源整理 学习网站 学堂在线 链接&#xff1a;http://www.xuetangx.com/简介 学堂在线是免费公开的MOOC&#xff08;大规模开放在线课程&#xff09;平台&#xff0c;是国家教育部MOOC研究中心官方合作平台&#xff0c;致力于通过来自国内外一流名校开设的免费网络学习课程 EDX…

[工具] 知网(CNKI)文献下载工具

https://github.com/amyhaber/cnki-downloader 用于免费搜索&#xff0c;下载CNKI上的各类文献资料 转载于:https://www.cnblogs.com/Areas/p/5887671.html

Web中Servlet

一&#xff1a; web.xml中的代码如下 <web-app><display-name>Archetype Created Web Application</display-name><servlet><servlet-name>AddServlet</servlet-name><servlet-class>servlets.AddServlet</servlet-class>&l…

Thymeleaf视图模板的学习以及一些语法用法

流程&#xff1a;客户端向服务端的index组件发送请求&#xff0c;index组件会调用FruitDAO直至获取到数据库的数据&#xff1b;服务端获取到fruitList之后&#xff0c;存入到Session中&#xff0c;方便之后使用&#xff1b;之后调用ViewBaseServlet中的processTemplate方法&…

21 RadioGroup ListFragment

结构 MainActivity.java package com.qf.day21_radiogroupfragment_demo3;import java.util.ArrayList; import java.util.List;import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.…

XML与过滤器、事务管理

一 XML 二&#xff1a;过滤器&#xff08;Filter&#xff09; 功能&#xff1a; WebFilter("/demo01.do") public class Demo01Filter implements Filter {Overridepublic void init(FilterConfig filterConfig) throws ServletException {}Overridepublic void doF…

Mybatis获取参数值的各种情况

public interface SelectMapper {//根据ID查询用户信息User getUserById(Param("id") Integer id);//查询所有用户信息List<User> getAllUser();//查询用户信息的总记录数Integer getCount();//查询用户信息使用mapMap<String, Object> getUserByIdToMap…

Mybatis中的配置文件xml

在配置的过程中&#xff1a;我们的mapper接口要与映射的XML文件处在同一位置下&#xff08;层级相同&#xff09; 比如&#xff1a;java.mybatis.mapper.ParameterMapper 对应: resoureces.mybatis.mapper.ParameterMapper 否则在进行测试的时候会出现无效的绑定 Invalid b…

Mybatis中解决属性名与字段名不一致的场景

* a>为字段起别名使得与属性名保持一致* b>设置全局配置将下划线自动映射为驼峰&#xff08;Mybatis-config中&#xff09;* <settings>* <!--将下划线自动映射为驼峰 emp_name:empName-->* …

Mybatis中处理多对一的映射关系

数据库中的结构&#xff1a; 实体类&#xff1a; 最终结果&#xff1a; 一&#xff1a;级联属性查询 自定义resultMap中可以这样设置&#xff1a; <resultMap id"empAndDeptResultMapOne" type"Emp"><id property"eid" column"ei…

Mybatis中处理一对多的映射关系

一对多与多对一的区别&#xff1a; 以部门表为单位&#xff0c;一个部门会有很多员工为一对多的关系 以员工表为单位&#xff0c;会有多个员工在一个部门中为多对一的关系 一&#xff1a;collection 由于一个部门中会有多个员工&#xff0c;即一对多的关系因此我们需要的实体…

Mybatis中缓存

1、一级缓存 SqlSession sqlSession SqlSessionUtils.getSqlSession();CacheMapper mapper sqlSession.getMapper(CacheMapper.class);Emp emp1 mapper.getEmpByEid(1);System.out.println(emp1);Emp emp2 mapper.getEmpByEid(1);System.out.println(emp2); 可以看到只访问…

HTML页面、CSS样式的以及js学习与介绍

html决定页面显示什么内容 css决定页面的美观程度html语言是解释型语言&#xff0c;解释不出来就不管了&#xff0c;不区分大小写 浏览器是容错的1&#xff09;html页面由一对标签组成:<html><html/>&#xff0c;分别成为开始标签和结束标签 2&#xff09;title:表…

lwip连续发数据卡死_Mysteel:12月全球铁矿石发运量稳中微增 进口矿咋走?

十一月份铁矿石供需差收紧价格上行。展望十二月份&#xff0c; 全球铁矿石发运稳中微增&#xff0c;到港小幅下降&#xff0c;澳洲方面&#xff0c;力拓财年末冲量将带来部分增量&#xff0c;但BHP仍受检修影响环比或将有所减量&#xff0c;整体来看&#xff0c;预计澳洲发运量…

CS模式与BS模式以及Tomcat的了解

一、CS与BS的差异 二、Tomcat Tomcat :web container 可执行文件目录 配置文件 部署项目的一个文件夹&#xff08;现在不怎么用这种方法&#xff09; 在webapp中&#xff0c;可以创建自己的web项目&#xff1a; 里面需要包含一个文件夹&#xff1a;WEB-INF以及自己的网页 之后…