这里的 FatherObj1.call(this); 可以理解为把FatherObj1这个对象里的属性和方法委托给this也就是Sonobj,或者遗传给Sonobj,这种方式与C#,Java的继承不同的是:js可以继承多个父类,而C#,java只能继承一个, 那么问题来了,js继承多个父类,而多个父类如果有同名方法或者同名属性,会发生什么事情? function
1)return[[Call]](Function.prototype.call,test,argList)}// test作为函数的this值// 注意:入参thisArg的值为Function.prototype.call.call的入参arg1Function.prototype.call=function(thisArg,arg1,arg2,...){
Function.prototype.myCall# // 和apply的唯一区别就是入参被拆开了Function.prototype.myCall=function(ctx, ...args) {// 避免上下文不传,缺省值为 window 全局对象ctx ||=window;// 创建一个唯一的 Symbol 避免对象属性重复constuniqueKey =Symbol("fn");// 保存当前的 this,当前的 this 原来指向调用它的...
call,apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的, 因为属于Function.prototype,所以每个Function对象实例(就是每个方法)都有call,apply属性。 既然作为方法的属性,那它们的使用就当然是针对方法的了, 这两个方法是容易混淆的,因为它们的作用一样,只是使用方式不同。
Function.prototype.call = function(thisArg, arg1, arg2, ...) { /*** 注意:this指向调用call的那个对象或函数 ***/ 1. 2. // 1. 调用内部的IsCallable(this)检查是否可调用,返回false则抛TypeError if (![[IsCallable]](this)) throw new TypeError() ...
/*** Function.prototype是一个function Empty(){}函数 ***/ if (![[IsCallable]](Function.prototype)) throw new TypeError() var argList = [].slice.call(arguments, 1) // 实际上就是调用Empty函数而已,那返回undefined是理所当然的 return [[Call]](Function.prototype, test, argList) ...
Function.prototype.myApply=function(context,args){context=context||window;context.fn=this;constresult=context.fn(...args);deletecontext.fn;returnresult;} 当然调用的时候还是有一点点不同的,第二个参数是参数数组,而不是像call()方法一样,是一个或多个参数。
Function.prototype.call=function(x){ x = x || {}; x['fn'] = this; var args = '';//参数列表 var type; for (var i = 1; i<arguments.length;i++) { if (typeof arguments[i] === 'string') {//参数是字符串,需要在两边加引号,因为在拼接参数的时候会被丢掉 type = '"'+argument...
本文主要和大家分享js原型和call(),我们对js原型和call()做了一个小总结,希望能帮助到大家。 /* 原型也是一个对象 把共有的属性或者方法放在原型中 */ //person.prototype 原型 /*person.prototype = { } 祖先*/ person.prototype.name = "这是祖先的名称 "; /*多个属性可以这样定义*/ person.prototype ...
/** * !实现 binCall() 方法 * @param {*} context 绑定的对象 * @param {...any} args 剩余参数 * @returns */ Function.prototype.binCall = function(context, ...args) { if (typeof this !== 'function') console.error('type Error'); // 1 context = (context!==null && context!=...