首页 > 其他分享 >手动封装call

手动封装call

时间:2023-08-01 10:35:34浏览次数:27  
标签:Object 封装 name 手动 call var obj 歌谣


 

目录

前言

导语

代码封装部分

验证

总结


前言

我是歌谣 我有个兄弟 巅峰的时候排名c站总榜19 叫前端小歌谣 曾经我花了三年的时间创作了他 现在我要用五年的时间超越他 今天又是接近兄弟的一天人生难免坎坷 大不了从头再来 歌谣的意志是永恒的 放弃很容易 但是坚持一定很酷

导语

歌谣 歌谣 前端eval的使用

手动封装call_封装

手动封装call_i++_02编辑

代码封装部分

Function.prototype.mycall = function(obj){
			//判断是否为null或者undefined,如果是则默认window;如果
传递的参数不是对象用Object转为对象
    		obj = obj ? Object(obj) : window;
			var args = [];
			
			//注意此处for循环的i是从1开始,因为第1个参数是obj
			for(var i=1,len = arguments.length;i<len;i++){
				args.push("arguments"+"["+i+"]");
			}
			 console.log(args,"args");//[ "arguments[1]", 
"arguments[2]", "arguments[3]" ]
			//最重要的一步!说明了两个问题:1.mycall内部的this
是指向调用者fn函数(对象的);2.Obj.func就是fn函数,
     // obj对象调用了fn函数,因此fn函数内部的this指向obj
			console.log(this,"this") //function fn(a, b, c)
      obj.fn = this;
      // console.log(obj.fn(args),"obj.fn")
      // console.log(eval("obj.fn("+args+")"),"eval")
			var result = eval("obj.fn("+args+")");
			delete obj.fn;
      console.log(result,"result"); // 我的老婆是geyao
			return result;
		}

手动封装call_封装_03

验证

var name = 'fangfang';
		var obj = {
		    name: 'geyao'
		};

		function fn(a, b, c) {
		    console.log(a + b + c + this.name);
        return a + b + c + this.name
		};
    fn.mycall(obj,"我的", "老婆", "是"); // 我的老婆是geyao

手动封装call_for循环_04

总结

这是es5用的方式 下一节我们来看看es6的封装简化


标签:Object,封装,name,手动,call,var,obj,歌谣
From: https://blog.51cto.com/u_14476028/6918245

相关文章

  • android网络通讯数据封装之 json
    Demo程序包括客户端和服务端客户端按json数据格式封装数据传至服务端。服务端为简单的servlet程序,负责接收客户端传到json数据,然后按原数据返回客户端.实例代码如下:publicstaticStringcmdLogIn(){StringurlString="http://192.168.8.75:89/webroot/jsontest";HttpPo......
  • c++11 call_once & once_flag
    #include<iostream>#include<mutex>usingnamespacestd;voidonce_fun(std::once_flag&&flag){std::call_once(flag,[](){cout<<"messagefromoncefun"<<endl;});}voidonce_fun1(s......
  • 008、adb命令 (service call iphonesubinfo 15),获取手机号码
    获取手机号码命令, adb shell service call iphonesubinfo 15 如下:不同android版本15的数字不一样,可是是13或17等C:\Users\SZ-M1-BD-0080>adbshellservicecalliphonesubinfo15Result:Parcel(0x00000000:000000000000000e0038002b00310036'..............
  • reactor.core.Exceptions$ErrorCallbackNotImplemented: java.lang.IndexOutOfBoundsE
    生产环境好好的,突然前端请求全部跨域,请求500。gateway报错。reactor.core.Exceptions$ErrorCallbackNotImplemented:java.lang.IndexOutOfBoundsException:Index:0,Size:0。所有的接口都报。原因由于gateway也集成了springboot-admin,开启了应用程序的actuator端点,导致......
  • 基于面向对象的数据封装
    基于面向对象的数据封装目录基于面向对象的数据封装1基于面向对象的数据封装优点2示例1基于面向对象的数据封装优点将属性和方法放到一起做为一个整体,然后通过实例化对象来处理;隐藏内部实现细节,只需要和对象及其属性和方法交互就可以了;对类的属性和方法增加访问权限控制......
  • 【个人模板封装】树套树、高维数据结构
    前言这是我个人使用的一些模板封装,限于个人能力,可能存在诸多不足与漏洞,在未加测试直接使用前请务必小心谨慎。更新可能会滞后于我本地的文档,如有疑问或者催更之类的可以在评论区留言。全文模板测试均基于以下版本信息,请留意版本兼容问题。Windows,64bitG++(ISOC++20)stack......
  • Vue3中使用TypeScript封装axios遇到的问题(AxiosRequestConfig)
    如果您有更好的解决方法,欢迎评论区评论。版本"dependencies":{"axios":"^1.0.0","vant":"^4.6.3","vue":"^3.3.4","vue-router":"^4.2.4","vuex":&quo......
  • H5打包封装小程序系统开发
    H5打包封装小程序系统开发H5打包封装小程序系统开发是指将H5页面打包封装成小程序的开发过程。下面是一个简单的步骤:准备工作:首先,需要准备好H5页面的代码和资源文件。确保H5页面在浏览器中正常运行,并且没有依赖于浏览器特定的功能。创建小程序项目:在微信开发者工具中创建一个新的小......
  • 【结合业务需求给出合理的技术解决方案,改进现有模块功能,提高系统的可扩展性,封装性,稳定
    一、技术解决方案随着企业规模的扩大和业务量的增加,企业信息系统的可扩展性、封装性、稳定性等方面的要求越来越高。针对这些问题,我们可以采用以下技术解决方案:1.采用云计算技术云计算技术能够提供高度可扩展和可靠的基础设施,具有快速、弹性、高效的特点,可以大大提高系统的可扩......
  • .netcore 中高性能队列Channel的应用与封装
          Channel存在于命名空间System.Threading.Channels中,是.net一种新型的线程安全集合,提供了发布和订阅消息处理功能,在一个服务中若接收消息和处理消息都很频繁,且处理消息耗时较长时,Channel是一种好的处理方式。1、创建Channel方式(支持泛型消息格式) 支持5种创建......