js 调用函数,可以使用哪些方法?
在 JS 中有 4 种方法可以调用函数。
作为函数调用——如果一个函数没有作为方法、构造函数、apply
、call
调用时,此时 this
指向的是 window
对象(非严格模式)
//Global Scope function add(a,b){ console.log(this); return a + b; } add(1,5); // 打印 "window" 对象和 6 const o = { method(callback){ callback(); } } o.method(function (){ console.log(this); // 打印 "window" 对象 });
作为方法调用——如果一个对象的属性有一个函数的值,我们就称它为方法。调用该方法时,该方法的this
值指向该对象。
const details = { name : "Mybj", getName(){ return this.name; } } details.getName(); // Mybj
作为构造函数的调用-如果在函数之前使用new
关键字调用了函数,则该函数称为构造函数
。构造函数里面会默认创建一个空对象,并将this
指向该对象。
function Employee(name, position, yearHired) { // 创建一个空对象 {} // 然后将空对象分配给“this”关键字 // this = {}; this.name = name; this.position = position; this.yearHired = yearHired; // 如果没有指定 return ,这里会默认返回 this }; const emp = new Employee("Mybj", "Software Developer", 2017);
使用apply
和call
方法调用——如果我们想显式地指定一个函数的this
值,我们可以使用这些方法,这些方法对所有函数都可用。
const obj1 = { result:0 }; const obj2 = { result:0 }; function reduceAdd(){ let result = 0; for(let i = 0, len = arguments.length; i < len; i++){ result += arguments[i]; } this.result = result; } reduceAdd.apply(obj1, [1, 2, 3, 4, 5]); // reduceAdd 函数中的 this 对象将是 obj1 reduceAdd.call(obj2, 1, 2, 3, 4, 5); // reduceAdd 函数中的 this 对象将是 obj2
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
码云笔记 » js 调用函数,可以使用哪些方法?
码云笔记 » js 调用函数,可以使用哪些方法?