ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

创建对象的四种方式

2021-11-23 21:34:50  阅读:92  来源: 互联网

标签:console name 方式 age 创建对象 eat 四种 log


创建对象的三种方式

1.字面量的方式去创建对象
2.使用new字符创建对象
3.自定义构造函数
4.工厂模式创建对象
对象是指:具有属性和方法
我之前一直以为对象就是有属性没有方法,尴尬了。主要是忘记了。

1.通过字面量的方式去创建对象


var person1={
    name:'柯南',
    age:12,
    sex:'男',
    eat:function(){
        console.log("我饿了,想吃饭")
    },
    say:function(){
        console.log("我叫柯南")
    }
}
console.log("person.eat输出函数",person.eat)
person.eat(); //直接输出 我饿了,想吃饭

我们需要注意的是person.eat和person.eat()的区别
person.eat是输出函数
person.eat()是调用函数

2.使用new字符创建对象

var person2=new Object();
person2.name='柯南'
person2.age='21'
person2.sex='男'
person2.eat=function(){
    console.log("我饿了,想吃饭")
}
person2.say=function(){
    console.log("我叫柯南")
}
console.log( '性别',person2.sex ) //输出男

上面这两种方式去创建对象的缺点

虽然上面这两种都可以去创建对象
但是我们创建出来的对象压根就不知道是什么类型?
当然我们知道他们是OBject类型
这个时候我们就需要使用自定义构造函数去创建对象了

3.自定构造函数创建对象

 function Person(name,age,sex,like){
    console.log('没有给like形参传递值就是undeined',like)
    // 这里的this指向的是Person这个对象
    console.log('this',this)
    this.name=name;
    this.age=age;
    this.sex=sex;
    this.say=function(){
        console.log("我叫",name)
    }
}
//这一行代码表示的是创建一个对象
//同时实例化一个对象
//并且给这个对象的属性进行初始化
//所以这一行代码并不简单
let per1=new Person('柯南',19,'男');
per1.say();
console.log(per1 instanceof Person);//true

现在我们知道了per1是属于Person类型的
这就是自定构造函数创建对象的优势
我们知道它创建的对象是哪个类型的
ps:构造函数通常首字母大写

当我们new一个对象的时候做了四件事情

通过创建自定义对象我们明白了
当我们new一个对象的时候做了四件事情
1.开辟空间存储当前对象
2.把this设置为当前对象
3.设置属性和方法
3.把this对象返回

4.工厂模式创建对象

function createObj(name,age) {
    let obj=new Object();
    obj.name=name;
    obj.age=age;
    obj.sayHi=function(){
        console.log(obj.name)
    }
    return obj;
}
let per=createObj('司藤',200)
console.log(per.age); //200
per.sayHi(); //司藤

标签:console,name,方式,age,创建对象,eat,四种,log
来源: https://www.cnblogs.com/IwishIcould/p/15591109.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有