函数也是对象
任何函数也有prototype属性,我们说只有对象才有属性和方法,所以函数也是对象
,函数还有bind()方法和call()方法
函数中的bind()方法,可以改变this的指向 ,创建并返回一个新函数
call()方法,可以改变this的指向,与bind()不同的是他直接调用了函数
// 常见的错误,要注意一下
//声明一个对象
var dx = {
a: 123,
method: function () {
console.log(this.a);
}
}
// 调用方法
dx.method();//输出123
//将方法赋给其他变量
var other = dx.method;//这里不是调用method方法,注意
other();//输出undefined,因为other里面的this指向的是window
/*
上面的other = dx.method相当于
function other() {
console.log(this.a);//函数中的this指向的是window
}
*/
下面要介绍我们的bind方法了,他的作用是创建并返回一个新的函数,第一个参数可以改变this的指向,如果函数还需要其他参数,可以继续在bind()里继续传
other = other.bind(dx);//将之前this指向的window改为dx
other();//此时输出的是123,因为上面我们使用bind()改变了this的指向
//-------------------------------call()---------------------------------
//call()可以改变this的指向,并调用函数
function fn() {
console.log(this);//此时this指向的是window
}
//创建一个对象
var o = {
name: 'o'
}
//直接调用函数;
fn();//输出的是window
// 使用call()方法
fn.call(o);//此时输出的是o对象
关于自调用函数
1、需要在自调用函数前面加分号,后面不用加
2、我们在看别人优秀代码的时候发现有给自调用函数传入参数(window, undefined)
(1)自调用函数传入 window的目的,是让变量名可以被压缩
(2) 在老版本的浏览器中 undefined 可以被重新赋值
;(function (window, undefined) {
var Tools = {
getRandom: function (min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
}
// 暴露Tools给window
window.Tools = Tools;
})(window, undefined)
网友评论