<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script>
//1.创建对象
var person = new Object();
person.name = ‘张三‘;
person.age = 18;
person.sayName = function() {
console.log(this.name);
}
//字面量形式
var person = {
name: ‘张三‘,
age: 18,
sayName: function() {
console.log(this.name);
}
}
//2.工厂模式:可以解决创建多个对象的问题,不足:不知道一个对象的类型
function createPerson(name, age) {
var o = new Object();
o.name = name;
o.age = age;
o.sayName = function() {
console.log(this.name);
}
return o;
}
var person1 = createPerson(‘张三‘,18);
var person2 = createPerson(‘李四‘,16);
//3.构造函数:可以解决对象类型的问题,不足:方法共享问题即每个方法都要在每个实例上重新创建一遍。
function Person(name, age) {
this.name = name;
this.age = age;
this.sayName = function() {
console.log(this.name)
}
}
var person1 = new Person(‘张三‘,18);
var person2 = new Person(‘李四‘, 16);
//4.原型模式:可以解决方法共享问题,不足:引用类型的数据改写一个实例所有实例跟着改写
function Person() {};
Person.prototype = {
constructor: Person,
name: ‘张三‘,
age: 18,
friends: [‘王五‘, ‘赵六‘],
sayName: function() {
console.log(this.name);
}
}
var person1 = new Person();
var person2 = new Person();
person1.friends.push(‘李立‘)
console.log(person1);
console.log(person2);
console.log(person1.friends == person2.friends);//true 注:要把其他的代码注释掉只剩原型模式才是true否则代码会受影响
//4.构造函数+原型:构造函数定义实例属性,原型模式定义方法和共享的属性
function Person(name, age) {
this.name = name;
this.age = age;
this.friends = [‘王五‘,‘赵六‘]
}
Person.prototype = {
constructor: Person,
sayName: function() {
console.log(this.name)
}
}
var person1 = new Person(‘张三‘,18);
var person2 = new Person(‘李四‘, 16);
person1.friends.push(‘李立‘);
console.log(person1.friends == person2.friends) //false;
</script>
</body>
</html>
面向对象:工厂模式、构造函数模式、原型模式、构造函数和原型组合
原文:https://www.cnblogs.com/xiyuyizhihua/p/10845787.html