js创建对象几种方式

new操作符 + Object创建对象

    let programmer = new Object();
    programmer.name = "张三丰";
    programmer.age = 108;
    programmer.language = ["Vue.js","uni-app","JavaScript"];
    programmer.write = ()=>{
        console.log("Hello word");
    }
    console.log(programmer);

在这里插入图片描述

字面式创建对象

    let programmer = {
        name:"张三丰",
        age:108,
        language:["Vue.js","uni-app","JavaScript"],
        write:()=>{
            console.log("Hello word");
        }
    }
    console.log(programmer);

在这里插入图片描述
以上两种方法在使用同一接口创建多个对象时,会产生大量重复代码

工厂模式

    function createProgrammer(name,age,language){
        let p = new Object();
        p.name = name;
        p.age = age;
        p.language = language;
        p.write = ()=>{
            console.log("Hello word");
        }
        return p;
    }

    let programmer1 = createProgrammer("张三丰",108,["Vue.js","uni-app","JavaScript"])
    let programmer2 = createProgrammer("张无忌",18,["golang","Java","JavaScript"])
    
    console.log(programmer1);
    console.log(programmer2);
    console.log(programmer1 instanceof Object); //true

在这里插入图片描述
  工厂模式解决了重复实例化多个对象的问题,但没有解决对象识别的问题(但是工厂模式却无从识别对象的类型,因为全部都是Object,不像Date、Array等,本例中,得到的都是p对象,对象的类型都是Object

构造函数模式

     function Programmer(name,age,language){
        this.name = name;
        this.age = age;
        this.language = language;
        this.write = ()=>{
            console.log("Hello word");
        }
    }
    let programmer1 = new Programmer("张三丰",108,["Vue.js","uni-app","JavaScript"])
    let programmer2 = new Programmer("张无忌",18,["golang","Java","JavaScript"])
    console.log(programmer1 instanceof Programmer); //true
    console.log(typeof  programmer2); //object

与工厂模式的不同:

  1. 没有显式的创建对象
  2. 直接将属性和方法赋给了this对象
  3. 没有return语句

调用构造函数步骤:

  1. 创建一个新对象
  2. 将构造函数的作用域赋值给新对象(将this指向这个新对象)
  3. 执行构造函数代码(为这个新对象添加属性)
  4. 返回新对象(指针赋给变量person)

  可以看出,构造函数知道自己是从哪里来的,通过instanceof可以看出其即使Object的实例,又是Person的实例。
构造函数的缺点:
  每个实例都包含不同的Function实例(构造函数内的方法在做同一件事,但是实例话后却产生了不同的对象,方法是函数,函数也是对象)

原型模式

    function Programmer(){
        
    }
    Programmer.prototype.name = '张三丰';
    Programmer.prototype.age = 108;
    Programmer.prototype.language = ["Vue.js","uni-app","JavaScript"];
    Programmer.prototype.write = ()=>{
        console.log("Hello word");
    }
    console.log(Programmer.prototype); //{name: "张三丰", age: 108, language: Array(3), write: ƒ, constructor: ƒ}

    var programmer1  = new Programmer();
    console.log(programmer1.name); //张三丰

    var programmer2 = new Programmer();
    programmer2.name = "张无忌";
    programmer2.language = ["golang","Java","JavaScript"];
    console.log(programmer2); // Programmer {name: "张无忌", language: Array(3)}
    console.log(programmer2.age); //108
    console.log(programmer2.prototype.name);  //Cannot read property 'name' of undefined

  原型模式的好处式所有对象实例共享它的方法和属性,还可以覆盖原型对象上的同名属性

参考文章:

shirliey:js创建对象的6种方式总结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: JavaScript创建对象几种方式包括: 1. 对象字面量:使用花括号{}创建一个对象,可以在其中定义属性和方法。 2. 构造函数:使用关键字new和一个函数来创建一个对象,可以在函数中定义属性和方法。 3. Object.create()方法:使用一个现有的对象作为原型来创建一个新的对象,可以在新对象中添加或修改属性和方法。 4. 工厂函数:使用一个函数来创建对象,该函数返回一个新的对象,可以在函数中定义属性和方法。 5. ES6中的类:使用class关键字来定义一个类,可以在类中定义属性和方法,使用new关键字来创建一个对象。 ### 回答2: JavaScript是一门面向对象的脚本语言,因此创建对象在其中是非常重要和基础的一环。 JavaScript创建对象方式可以分为以下几种: 1. Object构造函数 Object是JavaScript中的内建构造函数,它可以创建一个空对象或者通过传递参数创建具有属性的对象。 例子: ``` var obj = new Object(); //创建一个空对象 var car = new Object(); //创建有属性的对象 car.brand = "BMW"; car.color = "blue"; ``` 2. 对象字面量 对象字面量是一种简便的创建对象方式,它可以直接将属性与属性值的对应关系写在一起,通过花括号{}进行标识。 例子: ``` var obj = {}; //创建一个空对象 var car = { //创建有属性的对象 brand: "BMW", color: "blue" }; ``` 3. 构造函数 可以使用函数作为模板来创建对象,这样的函数就被称为构造函数。通过使用new关键字去实例化这个函数创建一个对象。 例子: ``` function Car(brand, color) { //定义构造函数 this.brand = brand; this.color = color; } var myCar = new Car("BMW", "blue"); //实例化构造函数,创建对象 ``` 4. 原型 JavaScript的原型实现了面向对象的继承机制,对象继承其原型的属性和方法。因此可以通过原型来创建对象。 例子: ``` function Car() { //定义构造函数 } Car.prototype.brand = "BMW"; //在原型上定义属性 var myCar = new Car(); //实例化构造函数,创建对象 console.log(myCar.brand); //输出"BMW" ``` 以上是JavaScript中创建对象几种方式,它们各自具有优点和适用范围。我们可以根据自己的实际需要,选择最适合的方式创建对象。 ### 回答3: JavaScript创建对象方式有多种,常用的有: 1.字面量方式:使用对象字面量创建对象 var person = { name: "John", age: 20, gender: "male", sayHello: function() { console.log("Hello, my name is " + this.name); } }; 2.构造函数方式:使用构造函数创建对象 function Person(name, age, gender) { this.name = name; this.age = age; this.gender = gender; this.sayHello = function() { console.log("Hello, my name is " + this.name); } } var person = new Person("John", 20, "male"); 3.原型方式:使用原型创建对象 function Person() {} Person.prototype.name = "John"; Person.prototype.age = 20; Person.prototype.gender = "male"; Person.prototype.sayHello = function() { console.log("Hello, my name is " + this.name); } var person = new Person(); 4.简单工厂方式:通过一个工厂函数创建对象 function createPerson(name, age, gender) { var person = {}; person.name = name; person.age = age; person.gender = gender; person.sayHello = function() { console.log("Hello, my name is " + this.name); } return person; } var person = createPerson("John", 20, "male"); 5.构造函数和原型组合方式:使用构造函数和原型结合创建对象 function Person(name, age, gender) { this.name = name; this.age = age; this.gender = gender; } Person.prototype = { constructor: Person, sayHello: function() { console.log("Hello, my name is " + this.name); } }; var person = new Person("John", 20, "male"); 以上是JavaScript创建对象的常见方式,不同的方式都有各自的优缺点,选择合适的方式可以提高执行效率和开发体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值