THIS
- 解析器在调用函数每次都会向函数内部传递进一个隐含的参数,this
- this指向一个对象,这个对象被称为:函数执行的上下文对象,根据函数的调用方式不同,this会指向不同的对象
测试
function fun(){
console.log(this)
}
// 以函数形式调用
fun() // [object window]
var obj = {
name : '溏心蛋',
sayName : fun
}
console.log(obj.sayName == fun) // true
// 以方法形式调用
obj.sayName() // [object{ name='溏心蛋',sayName=fun()}]
- 以函数形式调用时,this永远都是window
- 以方法形式调用时,this就是调用方法的那个对象
this补充
// 创建一个name变量
var name = '全局'
// 创建一个fun函数
function fun(){
console.log(name)
}
// 创建两个对象
var obj = {
name : '溏心蛋',
sayName : fun
}
var obj2 = {
name : '小鹿'
sayName : fun
}
fun() // 全局
// 条用obj.sayName()时可以输出obj的名字
obj.sayName() // 全局
// 将fun()函数中的name换成this.name
// function fun(){
// console.log(this.name)
// }
fun() // 全局
obj.sayName() // 溏心蛋
obj2.sayName() // 小鹿
工厂化创建对象
普通方法创建对象
普通的创建对象方法:
var obj1 = {
name : 'txd',
age : 18,
gender : '男'
}
var obj2 = {
name : 'xl',
age : 18,
gender : '男'
}
太繁琐
工厂化方法创建对象
- 使用工厂方法创建对象
- 可以大批量创建对象
function createPerson(name , age , gender){
// 创建一个新的对象
var obj = new Object();
// 想对象中添加对象
obj.name = name
obj.name = age
obj.gender = gender
obj.sayName = function(){
alert(this.name)
}
// 将新的对象返回
return obj;
}
createPerson('txd',18,'男')
createPerson('xl',18,'男')