创建对象的几种模式

创建对象的几种模式

//第一种
var obj = new Object()
obj.name = "张三"
obj.age = 19
obj.setName = function(name){
    this.name = name
}
适用场景:不知道对象里面需要的数据
缺点:代码不简洁
//第二种
var zhangSan = {
    name:"张三",
    age:20,
    sayHi:function(){
        console.log(`我的名字是${this.name},我今年${this.age}岁了`)
    }
}
var liSi = {
    name:"李四",
    age:20,
    sayHi:function(){
        console.log(`我的名字是${this.name},我今年${this.age}岁了`)
    }
}
适用场景:只需要少量的对象时
缺点:创建多个相似对象时 代码冗余
//工厂模式
function createStudent(name,age){
    var obj = {
        this.name = name,
        this.age = age,
        this.sayHi = function(){
            console.log(this.name)
        }
    }
return obj
}
var zhangsan = createStudent("张三",20)
zhangsan.sayHi()
var lisi = createStudent("李四",22)
lisi.sayHi()
适用场景:一般不用
缺点:创建出来的对象没有联系 不能识别创建出来的对象属于哪个类型
//构造函数创建对象
function Person(name,age){
    this.name = name,
    this.age = age,
    this.sayHi = function(){
        console.log('你好')
    }
}
var zhangsan = new Person("张三",22)
var lisi = new Person('李四',20)
//看着好像没什么问题  但是在它的每个实例都有一个sayHi方法 占用了内存
//构造+原型
function Person(name,age){
    this.name = name,
    this.age = age,
}
Person.prototype.sayHi = function(){
    console.log('大家好,我是'+this.name)
}
var zhangsan = new Person('张三',20)
var lisi = new Person('李四',30)
zhangsan.sayHi()
lisi.sayHi()


学艺不精,欢迎大家批评指正!

posted @ 2021-12-06 14:08  一个小菜鸟的进阶之路  阅读(34)  评论(0编辑  收藏  举报