定义方法:方法就是把函数放在对象里面,对象只有两个东西——属性和方法
给fengli对象绑定一个函数,就可以做更多的事情。比如,写个age()方法,返回fengli的年龄;
在一个方法内部,this是一个特殊变量,它始终指向当前对象,也就是fengli这个变量。所以,this.birth可以拿到fengli的birth属性。
var fengli ={
name:'feng',
birth:'2000',
//方法
age:function () {
//今年-出生年
var now = new Date().getFullYear();
return now - this.birth;
}
}
//属性
fengli.name;
//方法,一定要带()
fengli.name();
上述拆开写的话:
JavaScript的函数内部如果调用了this,那么这个this到底指向谁?
答案是,视情况而定!
如果以对象的方法形式调用,比如fengli.age(),该函数的this始终指向此刻被调用的对象,也就是fengli,这是符合我们预期的。
如果单独调用函数,比如getAge(),此时,该函数的this指向全局对象,也就是window。
function getAge() {
//今年-出生年
var now = new Date().getFullYear();
return now - this.birth;
}
var fengli = {
name:'feng',
birth:'2000',
//方法
age:getAge//使用的时候要加括号,传递的时候不用加括号
}
apply
function getAge() {
//今年-出生年
var now = new Date().getFullYear();
return now - this.birth;
}
var fengli = {
name:'feng',
birth:'2000',
//方法
age:getAge
}
getAge.apply(fengli,[])//[]代表空参,意思是this指向了fengli这个对象,参数为空
另一个与apply()类似的方法是call(),唯一区别是:
apply()把参数打包成Array再传入;
call()把参数按顺序传入。
比如调用Math.max(3, 5, 4),分别用apply()和call()实现如下:
Math.max.apply(null, [3, 5, 4]); // 5
Math.max.call(null, 3, 5, 4); // 5