苏飞论坛
标题: 【零基础学习web前端】JavaScript 函数调用 [打印本页]
作者: Amy 时间: 2018-12-20 16:31
标题: 【零基础学习web前端】JavaScript 函数调用
【零基础学习web前端】JavaScript 函数调用
【零基础学习web前端】教程目录导航
JavaScript 函数有 4 种调用方式。
每种方式的不同在于 this 的初始化。
this关键字:在Javascript中,this指向函数执行时的当前对象。注意 this 是保留关键字,你不能修改 this 的值。
作为一个函数调用
[HTML] 纯文本查看 复制代码
<p id="demo"></p>
<script>
function myFunction(a, b) {
return a * b;
}
document.getElementById("demo").innerHTML = myFunction(10, 2);
执行后返回值20.
以上函数不属于任何对象。但是在 JavaScript 中它始终是默认的全局对象。
在 HTML 中默认的全局对象是 HTML 页面本身,所以函数是属于 HTML 页面。
在浏览器中的页面对象是浏览器窗口(window 对象)。以上函数会自动变为 window 对象的函数。
myFunction() 和 window.myFunction() 是一样的:
[JavaScript] 纯文本查看 复制代码
function myFunction(a, b) {
return a * b;
}
window.myFunction(10, 2); // window.myFunction(10, 2) 返回 20
全局对象
当函数没有被自身的对象调用时 this 的值就会变成全局对象。
在 web 浏览器中全局对象是浏览器窗口(window 对象)。
该实例返回 this 的值是 window 对象:
[JavaScript] 纯文本查看 复制代码
function myFunction() {
return this;
}
document.getElementById("demo").innerHTML = myFunction();
返回[object Window]。
函数作为方法调用
在 JavaScript 中可以将函数定义为对象的方法。
[JavaScript] 纯文本查看 复制代码
var myObject = {
firstName:"John",
lastName: "Doe",
fullName: function() {
return this.firstName + " " + this.lastName;
}
}
document.getElementById("demo").innerHTML = myObject.fullName();
fullName 方法是一个函数。函数属于对象。 myObject 是函数的所有者。
this对象,拥有 JavaScript 代码。实例中 this 的值为 myObject 对象。
使用构造函数调用函数
这看起来就像创建了新的函数,但实际上 JavaScript 函数是重新创建的对象:
[JavaScript] 纯文本查看 复制代码
function myFunction(arg1, arg2) {
this.firstName = arg1;
this.lastName = arg2;
}
var x = new myFunction("John","Doe")
document.getElementById("demo").innerHTML = x.firstName;
执行后输出:John
作为函数方法调用函数
在 JavaScript 中, 函数是对象。JavaScript 函数有它的属性和方法。
call() 和 apply() 是预定义的函数方法。 两个方法可用于调用函数,两个方法的第一个参数必须是对象本身。
[JavaScript] 纯文本查看 复制代码
function myFunction(a, b) { return a * b; } myObject = myFunction.call(myObject, 10, 2); // 返回 20
[JavaScript] 纯文本查看 复制代码
function myFunction(a, b) {
return a * b;
}
myArray = [10, 2];
myObject = myFunction.apply(myObject, myArray); // 返回 20
如果函数调用前使用了 new 关键字, 则是调用了构造函数。
两个方法都使用了对象本身作为第一个参数。 两者的区别在于第二个参数: apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开始)。
在 JavaScript 严格模式(strict mode)下, 在调用函数时第一个参数会成为 this 的值, 即使该参数不是一个对象。
在 JavaScript 非严格模式(non-strict mode)下, 如果第一个参数的值是 null 或 undefined, 它将使用全局对象替代。
作者: 竹林风 时间: 2018-12-20 16:40
真是难得给力的帖子啊。
作者: 站长苏飞 时间: 2018-12-20 16:51
我只是路过打酱油的。
作者: 惜 时间: 2018-12-22 11:14
努力 什么时候 开始写个 插件的开发流程
作者: 范范 时间: 2018-12-24 22:16
无回帖,不论坛,这才是人道。
欢迎光临 苏飞论坛 (http://www.sufeinet.com/) |
Powered by Discuz! X3.4 |