<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>创建对象的几种方式</title>
</head>
<body>
</body>
</html>
<script>
// 1.Object构造函数创建 创建了Object引用类型的一个新实例,然后保存在变量Person中
var Person0 = new Object();
Person0.name = "ab";
Person0.age = 29;
// console.log(Person0)
// 2、使用对象字面量表示法 var Person={}
var Person2 = {
name: 'ad',
age: 29
};
// console.log(Person2)
// 以上两种的缺点:
// 它们都是用了同一个接口创建很多对象,会产生大量的重复代码,
//把创建对象的过程封装在函数体内,通过函数的调用直接生成对象。
// 3、使用工厂模式创建对象
function createPerson(name, age, job) {
var o = new Object();
o.name = name;
o.age = age;
o.job = job;
o.sayName = function() {
alert(this.name);
}
return o;
}
var Person3 = createPerson("ab", 29, "th);
var Person4 = createPerson("ac", 20, "sd");
// console.log(Person3)
// console.log(Person4)
// 4、使用构造函数创建对象
function Person(name, age, job) {
this.name = name;
this.age = age;
this.job = job;
this.sayName = function() {
// alert(this.name)
console.log(this.name)
}
}
var person5 = new Person("ab", 29, "th");
var person6 = new Person("ac", 20, "sd");
// console.log(person5)
// console.log(person6)
// 对比工厂模式,我们可以发现以下区别:
// 1.没有显示地创建对象
// 2.直接将属性和方法赋给了 this 对象
// 3.没有 return 语句
// 4.终于可以识别的对象的类型。对于检测对象类型,我们应该使用 instanceof 操作符,我们来进行自主检测
// console.log(person5 instanceof Object); //ture
// console.log(person5 instanceof Person); //ture
// console.log(person6 instanceof Object); //ture
// console.log(person6 instanceof Object); //ture
// 5、原型创建对象模式 解决:
// 就是每个方法都要在每个实例上重新创建一遍,方法指的就是我们在对象里面定义的函数。如果方法的数量很多,就会占用很多不必要的内存。于是出现了第五种创建对象的方法
function Person() {}
Person.prototype.name = "ab";
Person.prototype.age = "20";
Person.prototype.jbo = "th";
Person.prototype.sayName = function() {
console.log(this.name);
};
var person7 = new Person();
var person8 = new Person();
person7.name = "hj";
console.log(person7.name); //'hj'实例
console.log(person8.name); //'ab'原型
// 6、组合使用构造函数模式和原型模式
function Person(name, age, job) {
this.name = name;
this.age = age;
this.job = job;
}
Person.prototype = {
constructor: Person,
sayName: function() {
alert(this.name);
}
}
var person9 = new Person('ab', 20, 'th');
console.log(person9)
</script>