- 直接创建对象方法
- 工厂模式创建对象
- 构造函数创建对象
- 原型创建对象
1、直接创建对象方法
<script>
//创建学生对象,包含姓名,年龄,身高
//直接创建对象方法
var student = {
name: "张三",
age: "18",
height: "185",
showInfo: function () {
console.log(this)
}
}
student.showInfo()
var student1 = {
name: "李四",
age: "18",
height: "185"
}
var student = {
name: "王五",
age: "18",
height: "185"
}
</script>
优点:简单
缺点:不实用,太过于繁琐,无法大量生产
2、工厂模式创建对象
<script>
function createStudent(name, age, height) {
var obj = {}
obj.name = name
obj.age = age
obj.height = height
obj.showinfo = function () {
console.log(this.name)
}
return obj
}
var s1 = createStudent("张三", 18, 185)
var s2 = createStudent("李四", 18, 187)
function createTeach(name, age, height) {
var obj = {}
obj.name = name
obj.age = age
obj.height = height
obj.showinfo = function () {
console.log(this.name)
}
return obj
}
var t1 = createTeach("王五", 56, 167)
console.log(t1)
// var q = t1 instanceof createTeach//false
var q = t1 instanceof createStudent
console.log(q)//false
</script>
优点:可以快速生产同类型的对象
缺点:无法明确的确认对象属于何种类型
3、构造函数创建对象
<script>
function Student(name, age, height) {
this.name = name
this.age = age
this.height = height
this.showinfo = function () {
console.log(this.name)
}
}
var s1 = new Student("张三", 18, 185)
var r = s1 instanceof Student
console.log(r)//true
function Teach(name, age, height) {
this.name = name
this.age = age
this.height = height
this.showinfo = function () {
console.log(this.name)
}
}
var t1 = new Teach("李四", 57, 167)
console.log(t1)
var s = t1 instanceof Teach
console.log(s)//true
var b = t1 instanceof Student
console.log(b)//false
</script>
通过模拟类的方式改变this的指向
优点:可以快速生产要的到的对象且明确知道对象的类型
缺点:占内存
4、原型创建对象
<script>
function Student(name, age, height) {
this.name = name
this.age = age
this.height = height
}
Student.prototype.showInfo = function () {
console.log(this.name)
}
var s1 = new Student("张三", 14, 181)
var s2 = new Student("李四", 14, 181)
s1.showInfo()//张三
console.log(s1.__proto_ == s2.__proto_)//true
</script>
优点:可以量产,有明确的类型,节约空间