博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
带你手动实现call方法,让你收获满满
阅读量:3888 次
发布时间:2019-05-23

本文共 1444 字,大约阅读时间需要 4 分钟。

1.首先,了解call方法的要点

  • 语法:function.call(thisArg, arg1, arg2, ...)
    参数:
    1.thisArg
    在 function 函数运行时使用的 this 值。请注意,this可能不是该方法看到的实际值:如果这个函数处于非严格模式下,则指定为 null 或 undefined 时会自动替换为指向全局对象,原始值会被包装。
    this指向:非严格模式下,指向window。严格模式下,为undefined。
    示例:
var a = 2;    var obj = {
name: 'ha', age: 12, getSome : function () {
// 'use strict'; 非严格模式下 console.log(this); // window console.log(a); // 2 } } obj.getSome.call(undefined);--------------------------------------------------------- var a = 2; var obj = {
name: 'ha', age: 12, getSome : function () {
'use strict'; // 严格模式下 console.log(this); // undefined console.log(a); // 2 } } obj.getSome.call(undefined);
  • 返回值
    使用调用者提供的 this 值和参数调用该函数的返回值。若该方法没有返回值,则返回 undefined。
    手动实现时,还必须将值return出来。

2.手动实现call方法

要点:

  • 返回值
  • 将调用者,转变为this下的一个方法,执行完后,记得删除。
    示例:
const obj = {
name: 'ha', age: 12, getSome : function (a, b) {
console.log(this); return a + b; } } Function.prototype.myCall = function (context = window,...args) {
var func = this, fn = Symbol('fn'); // 确保属性名独一无二 context[fn] = func; // 这里的转变:调用者(函数)作为context对象的方法 var res = context[fn](...args); delete context[fn]; // 记得将context对象上刚刚新增的func方法删除 return res; } const res = obj.getSome.myCall(obj, 1, 2, 3); console.log(res);

结果如下:

在这里插入图片描述

转载地址:http://iwxhn.baihongyu.com/

你可能感兴趣的文章
HTML期末大作业~棋牌游戏静态网站(6个页面) HTML+CSS+JavaScript
查看>>
XmlValidationModeDetector源码分析
查看>>
解析 xml 为Document
查看>>
中国银行2013年校园招聘机试回忆录(综合部分专业题 考点)
查看>>
广发银行2013校园招聘笔试回忆录
查看>>
Android canvas rotate():平移旋转坐标系至任意原点任意角度-------附:android反三角函数小结...
查看>>
Matlab读取avi视频并播放 你必须要知道的
查看>>
word字体大小与公式编辑器字体对照表
查看>>
visio画图-----如何克服两箭头交叉变形 及 箭头自动重绘?
查看>>
Android开发:安装NDK,移植OpenCV2.3.1,JNI调用OpenCV全过程
查看>>
“金9银10”2020年JVM高频率面试题整理,技术提升就差一个点!
查看>>
简简单单的分享2020常见的MySQL面试题MySQL与答案整理
查看>>
听说只有大厂的Android工程师才能全答对这20道题?我看你在吹牛哦!
查看>>
武功秘籍之 Redis 面试题全掌握,学完马上找面试官对线!
查看>>
50道!2020年!!MySQL高频数据库面试题解析,你都懂了吗?
查看>>
如何用Spring Boot加密配置文件中的特殊内容示例代码详解
查看>>
谈谈这些年面试官给大伙下的那些套,如何解?(面试技巧)
查看>>
5年开发经验的我被几条朋友圈打击到,点燃自己冲击阿里面经!
查看>>
5年工作经验的我放弃安逸,一份来自腾讯魔鬼面试的终极考验!
查看>>
学JAVA吗同学,这篇Sping boot 确定不了解下么?
查看>>