这里的 FatherObj1.call(this); 可以理解为把FatherObj1这个对象里的属性和方法委托给this也就是Sonobj,或者遗传给Sonobj,这种方式与C#,Java的继承不同的是:js可以继承多个父类,而C#,java只能继承一个, 那么问题来了,js继承多个父类,而多个父类如果有同名方法或者同名属性,会发生什么事情? function SonObj()...
Function.prototype.myCall# // 和apply的唯一区别就是入参被拆开了Function.prototype.myCall=function(ctx, ...args) {// 避免上下文不传,缺省值为 window 全局对象ctx ||=window;// 创建一个唯一的 Symbol 避免对象属性重复constuniqueKey =Symbol("fn");// 保存当前的 this,当前的 this 原来指向调用它的...
1Function.prototype._call =function(ctx) {2//将函数自身设置为 ctx 对象的属性3//非严格模式:4//- null 或 undefined 的this会自动指向全局对象5//- 基本类型的this会指向原始值的包装对象6ctx = ctx === null || ctx === undefined ? window : Object(ctx); 7ctx.fn =this;89/// 执行该函数...
有了上面的基础那么Function.prototype.call.call就不难理解了。就是以最后一个call函数的thisArg作为Function.prototype.call的this值啦!伪代码如下: // test作为thisArg传入 Function.prototype.call.call = function(test, arg1, arg2,...){ if ([[IsCallable]](Function.prototype.call)) throw new TypeError(...
在JavaScript中,每个函数对象都带有call()和apply()方法,即Function.prototype.call()和Function.prototype.apply(),这两个方法都是挂载在原型上的。 MDN官方解释如下: call: call() 方法使用一个指定的this值和单独给出的一个或多个参数来调用一个函数。 apply: apply()方法调用一个具有给定this值的函数,以及以...
本文主要和大家分享js原型和call(),我们对js原型和call()做了一个小总结,希望能帮助到大家。 /* 原型也是一个对象 把共有的属性或者方法放在原型中 */ //person.prototype 原型 /*person.prototype = { } 祖先*/ person.prototype.name = "这是祖先的名称 "; /*多个属性可以这样定义*/ person.prototype ...
apply和call 本来就是为了扩展函数的作用域而生的,换句话说就是为了改变this的指向存在的 当一个object没有某种方法,但是其他的有,我们可以借助call和apply来用其他对象的方法来做操作,也可以传参数 function Person(name,age,love){ //原父类方法和私有属性以及方法 =name; this.age=age; this.love=love...
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...
Function.prototype.myApply=function(context,args){context=context||window;context.fn=this;constresult=context.fn(...args);deletecontext.fn;returnresult;} 当然调用的时候还是有一点点不同的,第二个参数是参数数组,而不是像call()方法一样,是一个或多个参数。
Function.prototype.apply (thisArg, argArray) 当以thisArg和argArray为参数在一个func对象上调用apply方法,采用如下步骤: 1.如果IsCallable(func)是false, 则抛出一个TypeError异常。 2.如果argArray是null或undefined, 则返回提供thisArg作为this值并以空参数列表调用func的[[Call]]内部方法的结果。