// 注意:构造函数不能使用箭头函数定义
function Person(name, age) {
// 在构造函数中,this关键字,用于给类添加成员
this.name = name
this.age = age
this.sayHi = function() {
console.log(`大家好!我叫${this.name},今年${this.age}岁`);
}
}
// 创建对象,该对象会拥有,类型中定义的所有成员。
let p1 = new Person('张三', 20)
console.log(p1);
p1.sayHi()
let p2 = new Person('李四', 24)
console.log(p2);
p2.sayHi()
console.log('-----------------------------------------');
let obj1 = {
//对象的两个属性
name: '肖战',
age: 20,
//对象的方法
sayHi: function() {
// 在方法中,this指向方法的调用者,谁在调用该方法,this就指向谁
// 如果一个方法,不是由对象调用执行的,而是直接执行的,那么该方法里面的this就执行window对象
console.log(`Hi!我是${this.name},今年${this.age}岁`);
},
sayHello: () => {
// 在箭头函数中没有this,如果在箭头函数中使用了this,它会向上一层函数中去找this
// 如果上一层函数也是箭头函数,或者没有上一层函数了,这个时候this就指向window对象。
console.log(`Hello!我是${this.name},今年${this.age}岁`);
}
}
obj1.sayHi()
let obj2 = {
name: '关晓彤',
age: 22,
}
//可以将obj1的函数传给obj2,其实是obj2的sayHi方法,指向obj1的方法
obj2.sayHi = obj1.sayHi
obj2.sayHi()
//将obj1身上的函数,传给了一个sayHi变量
let sayHi = obj1.sayHi
window.name = '小明' //设置window对象的name属性
window.age = 22 //设置window对象的age属性
sayHi()
console.log('-------------------------');
obj1.sayHello()
obj2.sayHello = obj1.sayHello
obj2.sayHello()
let sayHello = obj1.sayHello
sayHello()
console.log('------------------------------');
// var 定义的成员,会自动添加为window对象的成员
var address = '安德门'
var showAddress = function() {
console.log(`地点在${this.address}`);
}
console.log(window);
showAddress()
window.showAddress()
console.log('---------------------------------------');
// 定义一个对象
let obj1 = {
name: '鹿晗',
age: 30,
//自我介绍方法
sayHi() {
console.log(`Hi!我叫${this.name},今年${this.age}岁`);
},
//显示我的女朋友信息
showMyFriend() {
// 备份this
// let that = this
return {
name: '关晓彤',
age: 20,
//自我介绍的方法
sayHi() {
console.log(`Hi!我叫${this.name},今年${this.age}岁`);
},
//介绍鹿晗
showlh: () => {
// console.log(`Hi!我的男朋友叫${that.name},今年${that.age}岁`);
console.log(`Hi!我的男朋友叫${this.name},今年${this.age}岁`);
}
}
}
}
obj1.sayHi()
let obj2 = obj1.showMyFriend()
obj2.sayHi() //调用自我介绍的方法
obj2.showlh() //调用介绍鹿晗的方法