js 创建对象 经典模式全面了解

JS创建对象-经典模式

在JavaScript中,对象是实例化一个类的一种方式。JS有很多种方式来创建对象,经典模式是其中一种,也是​​最基础的一种,但是在ES6中已经有了更加方便的方式来实现创建对象。

经典方式

那么什么是经典方式呢?经典方式指的是使用构造函数来实现创建对象。

构造函数创建对象

构造函数实际上就是普通的JS函数,在使用构造函数创建对象的时候,我们使用了'new'关键字去创建一个实例,如下:

function Animal(name, type) {   //构造函数
    this.name = name;
    this.type = type;
    this.say = function () {    //公共方法
        console.log(`My name is ${this.name}, I'm a ${this.type}.`);
    };
}
let cat = new Animal('Tom', 'Cat');   //实例
cat.say();    // My name is Tom, I'm a Cat.

首先定义了一个构造函数 Animal,并且在构造函数里定义了两个属性,name、type一个公共方法 say(),注意,这个公共方法是每一个使用该构造函数创建的实例都会共享的。

当我们使用'new'关键字创建一个实例的时候,会创建一个对象,并且这个新对象的原型会链接到构造函数的原型(Animal.prototype),因此,在这个实例中能够访问到原型上的方法和属性。

可以通过instanceof来判断该对象是否是通过该构造函数的实例创建的。

console.log(cat instanceof Animal); //true

原型方式创建对象

在使用构造函数定义一个对象的时候,公共方法可能会占用过多的内存,因为每一个实例都会创建一个相同的方法,但是JS中有一个更加高效的方式来处理这种问题,那就是原型方式。

首先我们通过构造函数定义一个对象,然后通过给该构造函数的原型 prototype 添加属性和方法,来实现共享这些属性和方法。这些属性和方法都可以通过实例(实例.proto)来访问。

function Animal(name, type) {    //构造函数
    this.name = name;
    this.type = type;
}
Animal.prototype.say = function () {   //原型方法
    console.log(`My name is ${this.name}, I'm a ${this.type}.`);
};

let dog = new Animal('Lucy', 'Dog');  //实例
dog.say();    //My name is Lucy, I'm a Dog.
console.log(dog instanceof Animal);   //true

Object.create()方式

我们还可以使用ES5中的Object.create()方法来创建一个对象实例,这种方式实际上是采用了原型式继承的一种比较常见的方式。

let Animal = {   //基础对象
    name: '',
    type: '',
    say() {
        console.log(`My name is ${this.name}, I'm a ${this.type}.`);
    }
}

let dog = Object.create(Animal);  //创建实例对象
dog.name = 'Lucy';
dog.type = 'Dog';
dog.say();   //My name is Lucy, I'm a Dog.
console.log(dog instanceof Animal);   //false

在这个例子中,我们定义了一个基础对象Animal,然后使用Object.create()方法来生成一个新的实例dog,实际上就是在生成一个新的对象,并且原型链上指向了Animal对象,在这个实例中可以访问到Animal对象上的所有属性和方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js 创建对象 经典模式全面了解 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • xmlplus组件设计系列之路由(ViewStack)(7)

    《xmlplus组件设计系列之路由(ViewStack)(7)》是XMLPlus团队所编写关于ViewStack组件的一篇技术文章。该文章中详细介绍了如何设计ViewStack组件,并提供了示例代码和运行演示。下面是该文章的完整攻略: XMLPlus组件设计系列之路由(ViewStack)(7) 什么是ViewStack组件? ViewStack组件是一种可…

    JavaScript 2023年6月11日
    00
  • javascript常用函数(2)

    当谈到JavaScript时,函数是其中最重要的概念之一。它允许我们将一坨代码封装在一起,并在需要时重复使用。在本篇文章中,我们将讨论一些常用的JavaScript函数,包括:Array.prototype.some、Array.prototype.find、Array.prototype.filter、setTimeout和setInterval。 Arr…

    JavaScript 2023年5月27日
    00
  • JavaScript高级程序设计 读书笔记之十一 内置对象Global

    JavaScript高级程序设计 读书笔记之十一 内置对象Global 什么是全局作用域 在JavaScript中,全局作用域是整个程序的最高层次。全局变量会成为全局作用域的属性,全局函数会成为全局作用域的方法。在全局作用域中定义的变量和函数,在整个程序范围内都是可用的。 Global对象简介 Global是JavaScript中的一个全局对象,它不是构造函…

    JavaScript 2023年5月27日
    00
  • js 倒计时(高效率服务器时间同步)

    关于“js 倒计时(高效率服务器时间同步)”的完整攻略,以下是详细的讲解过程。 什么是“js 倒计时(高效率服务器时间同步)” “js 倒计时(高效率服务器时间同步)”是指利用 JavaScript 实现网页倒计时显示,并且能够与服务器时间同步,保证倒计时的准确性。同时,为了保证效率,要尽量减少对服务器的请求,提升用户体验。 倒计时的实现方式 客户端倒计时 …

    JavaScript 2023年5月27日
    00
  • Js利用prototype自定义数组方法示例

    下面是关于 “Js利用prototype自定义数组方法示例” 的完整攻略: 什么是prototype? prototype 是 JavaScript 中的内置属性,它允许您向基于特定对象类型创建的所有对象添加新属性和方法。使用prototype 可以实现在原有的对象原型(既 Object.prototype) 上添加一些与自定义类或对象有关的方法和属性。 利…

    JavaScript 2023年5月27日
    00
  • layui的表单验证支持ajax判断用户名是否重复的实例

    以下是使用layui实现表单验证并通过ajax判断用户名是否重复的攻略: 1. 准备工作 首先,需要在网页中引入layui的核心文件和layui的form模块。可以通过以下方式在HTML文档中引入layui的核心文件和form模块: <!– 引入layui核心文件 –> <script src="https://cdn.jsd…

    JavaScript 2023年6月10日
    00
  • html5 web本地存储将取代我们的cookie

    HTML5 Web本地存储指的是一种在客户端(浏览器)端进行数据存储的技术。它主要通过Web Storage API和IndexedDB API来实现。 与传统的Cookie相比,Web本地存储有诸多优点。例如,Web本地存储提供了比Cookie更大的存储空间,并且数据存储在本地,不需要每次请求都带上一份数据,从而减少了网络流量。 以下是使用Web本地存储来…

    JavaScript 2023年6月11日
    00
  • Js md5加密网页版MD5转换代码

    让我来详细讲解一下“Js md5加密网页版MD5转换代码”的完整攻略。 什么是MD5加密 MD5是一种常用的加密算法,可以将任意长度的输入(字节流)转化为固定长度的输出(通常是128位)。这种转换是一种压缩算法,很难从输出中的散列值中反推出输入数据。因此,MD5被广泛应用于计算机安全领域。在网页开发中,常用MD5加密来保证用户的密码等敏感信息的传输安全。 J…

    JavaScript 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部