<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script type="text/javascript">
/* 1.
Object构造函数模式:
套路:先创建空Object对象,再动态添加属性/方法
适用场景:起始时不确定对象内部数据
问题:语句太多
*/
var p = new Object() //此时内部数据是不确定的
p.name = 'Tom'
p.age = 12
p.setName = function (name){
this.name = name
}
/*2
对象字面量模式
套路:使用{}创建对象,同时指定属性/方法
适用场景:起始时对象内部数据是确定的
问题:如果创建多个对象,有重复代码
*/
var p ={
name:'Tom',
age:12,
setName:function(name){
this.name = name;
}
}
/*3
工厂模式 //不太用
套路:通过工厂函数动态创建对象并返回
适用场景:需要创建多个对象
问题:对象没有一个具体的类型,都是Object类型
*/
function createPerson(name,age){
var obj = {
name:name,
age:age,
setName:function(name){
this.name = name
}
}
return obj
}
createPerson("Tom","12")
/*4
自定义构造函数
套路:自定义构造函数,用new创建对象
适用场景:需要创建多个类型确定的对象
问题:每个对象都有相同的数据,浪费内存
*/
function Person(name,age){
this.name =name
this.age =age
this.setName=function(name){
this.name =name
}
}
var s = new Person() //会有同一个原型对象
/*5
构造函数+原型的组合模式
套路:自定义构造函数,属性函数中初始化,方法添加在原型上
适用场景:需要创建多个类型确定的对象
*/
function Person(name, age){
this.name =name
this.age=age
}
Person.prototype.setName =function(name){
this.name=name
}
</script>
</body>
</html>