一个实例看懂JS四种创建对象方式的区别

简介: 本文目录1. 概述2. 功能相同3. 结构不同4. 小结

1. 概述

JS中常用的创建对象方式有四种:

  1. 对象字面量
  2. new Object()
  3. 构造函数
  4. Object.create()

这四种方式虽然都能创建对象,但是还是有区别的,接下来我们研究下。

2. 功能相同

先来看一个实例,我们使用4种方式创建4个对象。

    // 对象字面量
        var dog1 = {
            name: '大黄',
            age: 2,
            speak: function () {
                console.log("汪汪");
            }
        }
        // 使用Object
        var dog2 = new Object();
        dog2.name = "大黄";
        dog2.age = 2;
        dog2.speak = function () {
            console.log("汪汪");
        }
        // 使用构造函数
        function Dog(name, age) {
            this.name = name;
            this.age = age;
        }
        Dog.prototype.speak = function () {
            console.log("汪汪");
        };
        var dog3 = new Dog("大黄", 2);
        // 使用Object.create
        var dog4 = Object.create(dog1);
这4个对象都是有name、age两个属性和speak一个方法,我们来测试下:
    console.log(dog1.name + dog1.age);
        dog1.speak();
        console.log(dog2.name + dog2.age);
        dog2.speak();
        console.log(dog3.name + dog3.age);
        dog3.speak();
        console.log(dog4.name + dog4.age);
        dog4.speak();

image.png

3. 结构不同

虽然使用起来功能一样,但是实际这4个对象的结构并不是一样的,我们继续执行以下代码:


 console.log(dog1);

       console.log(dog2);

       console.log(dog3);

       console.log(dog4);


执行结果如下:

image.png

可见,对象字面量和new Object方式创建的对象结构是一样的。

使用构造函数创建的对象,speak方法是在其原型上的。

而使用Object.create创建的对象,原对象的属性和方法都会挂到新对象的原型上。

4. 小结

使用没区别,结构有区别,还是要加以区分的。

相关文章
|
3月前
|
JavaScript 前端开发 索引
js的循环中foreach、for in和for of的区别
js的循环中foreach、for in和for of的区别
147 0
|
13天前
|
设计模式 JavaScript 前端开发
js中new和object.creat区别
【10月更文挑战第29天】`new` 关键字和 `Object.create()` 方法在创建对象的方式、原型链继承、属性初始化以及适用场景等方面都存在差异。在实际开发中,需要根据具体的需求和设计模式来选择合适的方法来创建对象。
|
2月前
|
前端开发 JavaScript UED
JavaScript防抖和节流的使用及区别
JavaScript防抖和节流的使用及区别
105 57
|
1月前
|
存储 JavaScript 前端开发
JavaScript 数据类型详解:基本类型与引用类型的区别及其检测方法
JavaScript 数据类型分为基本数据类型和引用数据类型。基本数据类型(如 string、number 等)具有不可变性,按值访问,存储在栈内存中。引用数据类型(如 Object、Array 等)存储在堆内存中,按引用访问,值是可变的。本文深入探讨了这两种数据类型的特性、存储方式、以及检测数据类型的两种常用方法——typeof 和 instanceof,帮助开发者更好地理解 JavaScript 内存模型和类型检测机制。
71 0
JavaScript 数据类型详解:基本类型与引用类型的区别及其检测方法
|
1月前
|
存储 JavaScript 前端开发
js中函数、方法、对象的区别
js中函数、方法、对象的区别
16 2
|
1月前
|
前端开发 JavaScript
基础 JavaScript 实例
基础 JavaScript 实例
21 1
|
1月前
|
JavaScript 前端开发
【JavaScript】let,const和var的区别
总的来说,随着ECMAScript 6(ES6)及后续版本的推广,`let`和 `const`因其增强的块级作用域和对变量行为的更严格控制,逐渐成为现代JavaScript编码实践中推荐使用的变量声明方式。而 `var`由于其历史遗留的局限性,正逐渐被边缘化,但在维护老代码或处理特定兼容性需求时仍需了解。
35 3
|
2月前
|
前端开发 JavaScript 开发者
React 和 Vue.js 框架的区别是什么?
React 和 Vue.js 框架的区别是什么?
|
2月前
|
JavaScript 前端开发
js创建对象| 25
js创建对象| 25