关于js 的 call

xxxFunction.call(obj,[param1[,param2[,...[,paramN]]]])

obj:这个对象将代替xxxFunction类里this对象,(跟apply中的obj一样);
params
:这个是一个参数列表(即逗号隔开的零个或多个参数),不是数组;

 

var func = function(a,b){

       console.log(a+b);

}

 

那么func.call(this,1,2)将输出3

再看underscore.js里面一段代码:

var createCallback = function(func, context, argCount) {

    if (context ===void 0) {return func;}

    switch (argCount ==null ? 3 : argCount) {

        case 1: returnfunction(value) {

            returnfunc.call(context, value);

        };

        case 2: returnfunction(value, other) {

            returnfunc.call(context, value, other);

        };

        case 3: returnfunction(value, index, collection) {

            returnfunc.call(context, value, index, collection);

        };

        case 4: returnfunction(accumulator, value, index, collection) {

            returnfunc.call(context, accumulator, value, index, collection);

        };

    }

    return function() {

        returnfunc.apply(context, arguments);

    };

};

 

那么以下代码:

    var func =function(num,other){

        num =num+other;

       console.log("num:"+num);

    }

 

    var callbackFun =createCallback(func,null);

callbackFun(5,6);

将输出11

【直流微电网】径向直流微电网的状态空间建模与线性化:一种耦合DC-DC变换器状态空间平均模型的方法 (Matlab代码实现)内容概要:本文介绍了径向直流微电网的状态空间建模与线性化方法,重点提出了一种基于耦合DC-DC变换器状态空间平均模型的建模策略。该方法通过对系统中多个相互耦合的DC-DC变换器进行统一建模,构建出整个微电网的集中状态空间模型,并在此基础上实施线性化处理,便于后续的小信号分析与稳定性研究。文中详细阐述了建模过程中的关键步骤,包括电路拓扑分析、状态变量选取、平均化处理以及雅可比矩阵的推导,最终通过Matlab代码实现模型仿真验证,展示了该方法在动态响应分析和控制器设计中的有效性。; 适合人群:具备电力电子、自动控制理论基础,熟悉Matlab/Simulink仿真工具,从事微电网、新能源系统建模与控制研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握直流微电网中多变换器系统的统一建模方法;②理解状态空间平均法在非线性电力电子系统中的应用;③实现系统线性化并用于稳定性分析与控制器设计;④通过Matlab代码复现和扩展模型,服务于科研仿真与教学实践。; 阅读建议:建议读者结合Matlab代码逐步理解建模流程,重点关注状态变量的选择与平均化处理的数学推导,同时可尝试修改系统参数或拓扑结构以加深对模型通用性和适应性的理解。
06-21
### JavaScript 中 `call` 方法的用法和示例 在 JavaScript 中,`call` 方法允许以指定的 `this` 值调用一个函数,并传递参数列表。这是动态改变函数上下文(即 `this` 的值)的一种方式[^3]。 以下是 `call` 方法的基本语法: ```javascript function.call(thisArg, arg1, arg2, ...); ``` - `thisArg`: 调用函数时用作 `this` 的对象。 - `arg1, arg2, ...`: 传递给函数的参数。 #### 示例 1: 使用 `call` 改变 `this` 的值 以下代码展示了如何使用 `call` 方法将函数绑定到特定对象并执行: ```javascript function greet(greeting, punctuation) { console.log(greeting + ' ' + this.name + punctuation); } const person = { name: "Alice" }; greet.call(person, "Hello", "!"); // 输出: Hello Alice! ``` 在这个例子中,`greet` 函数通过 `call` 方法被调用,`this` 被设置为 `person` 对象[^3]。 #### 示例 2: 继承中的 `call` 方法 在继承场景中,`call` 方法可以用来确保父类构造函数被正确调用并初始化子类实例的属性[^2]。 以下是一个继承的例子: ```javascript function Animal(name, sound) { this.name = name; this.sound = sound; } Animal.prototype.speak = function() { console.log(this.sound); }; function Dog(name) { this.barkSound = "Woof woof."; Animal.call(this, name, this.barkSound); // 使用 call 调用父类构造函数 } Dog.prototype = Object.create(Animal.prototype); Dog.prototype.constructor = Dog; Dog.prototype.sayBark = function() { console.log(this.sound); }; const max = new Dog("Max"); max.speak(); // 输出: Woof woof. max.sayBark(); // 输出: Woof woof. ``` 在这个例子中,`Animal.call(this, name, this.barkSound)` 确保了 `Dog` 类的实例能够继承 `Animal` 类的属性和方法[^2]。 #### 示例 3: 使用 `call` 实现数组方法 `call` 方法还可以用于非数组对象上调用数组方法。例如,将类数组对象转换为真正的数组: ```javascript const arrayLike = { 0: "a", 1: "b", 2: "c", length: 3 }; const realArray = Array.prototype.slice.call(arrayLike); console.log(realArray); // 输出: ['a', 'b', 'c'] ``` 这里,`Array.prototype.slice.call(arrayLike)` 将 `slice` 方法应用于类数组对象 `arrayLike`,从而生成一个真正的数组[^4]。 ### 注意事项 - 如果 `thisArg` 不是对象,则会尝试将其转换为对象。如果无法转换,则 `this` 将是 `undefined` 或 `null`。 - 在严格模式下,未提供 `thisArg` 时,`this` 将保持为 `undefined`[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值