目录
- 一、对象创建
- 1. Object构造函数模式
- 2. 对象字面量形式
- 3. 工厂模式(很少使用)
- 4. 自定义构造函数模式
- 5. 构造函数+原型的组合模式
- 二、访问对象数据的方法
一、对象创建
1. Object构造函数模式
- 先创建Object,再动态添加属性或方法。适用于开始不确定对象内部数据的情况
var p = new Object();
p.name = 'tom';
p.age = 18;
p.setAge = function (age){
this.age = age;
}
2. 对象字面量形式
- 使用
{}
创建对象,同时指定方法和属性。适用于开始时对象内部数据确定的情况
var p ={
p.name = 'tom';
p.age = 18;
p.setAge = function (age){
this.age = age;
}
}
3. 工厂模式(很少使用)
- 通过工厂函数动态创建动态对象并返回,适用于创建多个对象的情况
function createPerson(name,age){
var obj=new Object();
obj.name=name;
obj.age=age;
obj.setAge=function(){
this.age = age;
}
return obj;
}
var obj=createPerson("工厂",18);
4. 自定义构造函数模式
- 构造函数的执行流程
(1)立刻创建一个新的对象
(2)将新创建的对象设置为函数中的this,在构造函数中可以使用this
来引用新建的对象
(3)逐行执行函数中代码
(4)将新建的对象作为返回值执行 - 可以使用
instanceof
检查一个对象是否属于一个类的实例,返回true
或false
function Person(name,age){
this.name=name;
this.age=age;
this.setAge=function(){
this.age = age;
}
}
var obj=new Person("tom",18);
console.log(obj instanceof Person); //true
5. 构造函数+原型的组合模式
- 自定义构造函数,属性在函数中初始化,方法添加在原型上。适用于创建多个类型确定的对象
function Person(name,age){
this.name=name;
this.age=age;
}
Person.prototype.setAge=function(){
this.age = age;
}
var obj=new Person("tom",18);
二、访问对象数据的方法
- 用
.属性名
的方式访问:当属性名包含特殊字符-
,空格
时不能使用;变量名不确定时也不能使用 - 用
['属性名']
的方式访问:通用
//变量名存储在变量中,变量名不确定
var p ={};
var propName = 'age';
var value = 20;
//将age属性添加到对象p中
p.propName = value; // 不可用
p[propName] = value; // 可用