一、为什么要有对象?
简化函数参数,使函数更加简洁化
二、什么是对象?
万物皆对象,对象具有属性和方法
三、对象的创建方式
- 对象字面量
var o = {
name: 'zz',
age: 18,
sex: "女",
sayHi: function () {
console.log(this.name);
}
};
- new Object()创建对象
var person = new Object();
person.name = 'Alice';
person.age = 18;
person.job = 'singer';
person.sayHi = function(){
console.log('Hello,everyBody');
}
- 工厂函数创建对象
function createPerson(name, age, job) {
var person = new Object();
person.name = name;
person.age = age;
person.job = job;
person.sayHi = function(){
console.log('Hi,everyone');
}
return person;
}
var p1 = createPerson('西西', 22, 'actor');
- 自定义构造函数
function Person(name,age,job){
this.name = name;
this.age = age;
this.job = job;
this.sayHi = function(){
console.log('Hello,everyone');
}
}
var p1 = new Person('qinaqian', 18, 'actor');
四、new关键字(和构造函数搭配使用)
new在执行时会做四件事:
- new会在内存中创建一个新的空对象
- new会让this指向这个对象
- 执行构造函数
- new会返回这个新对象
五、this详解
我们经常对this的概念比较模糊,一下总结了一下this:
1. 函数在定义的时候this是不确定的,只有在调用的时候才可以确定
2. 一般函数直接执行,内部this指向全局window
3. 函数作为一个对象的方法,被该对象所调用,那么this指向的是该对象
4. 构造函数中的this其实是一个隐式对象,类似一个初始化的模型,所有方法和属性都挂载到了这个隐式对象身上,后续通过new关键字来调用,从而实现实例化
以上是浏览器自定义对象,还有Math/Array/Number/String/Boolean等内置对象,包含history以内的浏览器对象。