JavaScript原型对象、构造函数和实例对象功能与用法详解

yizhihongxing

JavaScript原型对象、构造函数和实例对象功能与用法详解

前言

在讲解 JavaScript 原型对象、构造函数和实例对象之前,我们需要先了解几个概念:

  • 属性:包括原型对象和实例对象的属性,以及函数对象的属性
  • 方法:包括原型对象和实例对象的方法,以及函数对象的方法
  • 原型:每个 JavaScript 对象都有一个原型对象,用于继承属性和方法
  • 构造函数:用于创建实例对象的函数
  • 实例对象:通过构造函数创建出来的对象,可以使用原型对象的属性和方法

原型对象

JavaScript 对象有一个特殊的属性 __proto__,称为原型对象。每个对象都有一个原型对象,除了 null,而原型对象也是对象,因此它也有一个原型对象,一直到 Object.prototype,它是原型链的顶端。

在对象属性或方法查找时,如果对象本身没有该属性或方法,就会自动去它的原型对象中查找。我们常用的原型对象是函数的原型对象,每个函数都有一个原型对象,默认情况下它的 constructor 指向该函数本身。

function Person() {}
Person.prototype.name = "Alice";
Person.prototype.sayHello = function() {
    console.log("Hello, I'm " + this.name + ".");
};

var person = new Person();
person.sayHello();  // Hello, I'm Alice.

在上面的例子中,Person.prototype 是一个原型对象,它有两个属性:namesayHelloPerson 通过 new 关键字创建了一个实例对象 person,它继承了 Person.prototype 的所有属性和方法。因此 person 也有 namesayHello 两个属性和方法。

构造函数

构造函数是一种特殊的函数,它被用来创建实例对象。在 JavaScript 中,构造函数与普通函数的区别是通过 new 关键字调用,而普通函数可以直接调用。另外,构造函数一般用大写字母开头。

每个构造函数都有一个 prototype 属性,它是一个原型对象,也是该构造函数创建的所有实例对象的原型对象。在构造函数中定义的属性和方法都会被该构造函数创建的实例对象所继承。

function Person(name, gender) {
    this.name = name;
    this.gender = gender;
}
Person.prototype.sayHello = function() {
    console.log("Hello, I'm " + this.name + ".");
};

var person1 = new Person("Alice", "female");
var person2 = new Person("Bob", "male");
person1.sayHello();  // Hello, I'm Alice.
person2.sayHello();  // Hello, I'm Bob.

在上述例子中,Person 是一个构造函数,它有两个参数 namegender,并且在函数中用 this 关键字定义了两个实例属性。sayHelloPerson.prototype 的一个方法,因此所有通过 Person 创建的实例对象都可以使用 sayHello 方法。

实例对象

实例对象是通过构造函数 new 关键字创建出来的对象。每个实例对象都有一个 __proto__ 属性,它指向该实例对象所属的构造函数的原型对象。

function Person(name, gender) {
    this.name = name;
    this.gender = gender;
}
Person.prototype.sayHello = function() {
    console.log("Hello, I'm " + this.name + ".");
};

var person1 = new Person("Alice", "female");
var person2 = new Person("Bob", "male");
console.log(person1.__proto__ === Person.prototype);  // true
console.log(person2.__proto__ === Person.prototype);  // true

在上述例子中,person1person2 都是 Person 的实例对象,它们都有一个 __proto__ 属性,指向 Person.prototype

实例对象所具有的属性和方法,来自于它所属的构造函数的原型对象和实例自身定义的属性和方法。

示例说明

示例一:原型对象属性和方法的继承

function Student(name, grade) {
    this.name = name;
    this.grade = grade;
}
Student.prototype.sayHi = function() {
    console.log(`Hi, my name is ${this.name}, and I'm in grade ${this.grade}.`);
}

function Teacher(name, subject) {
    this.name = name;
    this.subject = subject;
}
Teacher.prototype = new Student();
Teacher.prototype.sayHi = function() {
    console.log(`Hello, my name is ${this.name}, and I teach ${this.subject}.`);
}

var student = new Student("Alice", 5);
var teacher = new Teacher("Bob", "Mathematics");

student.sayHi();  // Hi, my name is Alice, and I'm in grade 5.
teacher.sayHi();  // Hello, my name is Bob, and I teach Mathematics.

在该示例中,Student 是一个构造函数,它有两个属性 namegrade,还有一个原型方法 sayHiTeacher 是从 Student 派生的一个构造函数,它定义了一个属性 subject

Teacher.prototype 中,将它的原型对象设置为 Student.prototype,这样 Teacher 也就继承了 Student 的属性和方法,包括 sayHi 方法。在 Teacher.prototype 中重写了 sayHi 方法,保留了 name 属性,并新增了 subject 属性。

创建了 studentteacher 两个实例对象,它们分别使用了 Student.prototypeTeacher.prototypesayHi 方法,表现出不同的行为。

示例二:实例对象属性的修改

function Car(brand, price) {
    this.brand = brand;
    this.price = price;
}
Car.prototype.drive = function() {
    console.log(`Driving a ${this.brand} car, priced at ${this.price} dollars.`);
}

var car = new Car("Toyota", 20000);
car.drive();  // Driving a Toyota car, priced at 20000 dollars.

car.brand = "Honda";
car.price = 25000;
car.drive();  // Driving a Honda car, priced at 25000 dollars.

在该示例中,我们定义了一个 Car 构造函数,它有两个属性 brandprice,还定义了一个原型方法 drive,用于输出车辆相关信息。

创建了一个实例对象 car,并调用了 drive 方法,输出了车辆的信息。接着,我们通过修改 car 对象的 brandprice 属性,再次调用了 drive 方法,显示了修改后的信息。

这个例子展示了实例对象的属性可以修改,并且在调用方法时能够输出更新后的信息。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript原型对象、构造函数和实例对象功能与用法详解 - Python技术站

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

相关文章

  • 浅谈JS日期(Date)处理函数

    浅谈JS日期(Date)处理函数 在JavaScript中,日期(Date)处理是相当重要的一种数据类型。在我们的代码开发工作中,通常需要使用日期处理函数对日期进行操作。接下来我们将详细介绍JavaScript中日期处理函数的使用方法。 日期的基本操作 在JavaScript中,日期的基本操作包括创建日期对象、获取日期时间信息以及日期的格式化输出等。 创建日…

    JavaScript 2023年5月27日
    00
  • JavaScript封装Vue-Router实现流程详解

    首先需要明确一点,Vue-Router是一个Vue.js插件,我们可以通过引入Vue-Router并挂载到Vue实例上来实现前端路由功能。而封装Vue-Router是为了方便我们在项目中使用,并且增强Vue-Router的功能和易用性。 以下是封装Vue-Router的流程: 安装Vue-Router npm install vue-router -S 创建…

    JavaScript 2023年6月11日
    00
  • javascript数组里的27个方法总合详解

    首先,我们需要了解JavaScript数组的数据结构和一些常用的API。以下是这篇攻略的大纲: JavaScript数组:数据结构和常用API 1. 数组基础 数组是一种有序的数据集合。它可以存储任何类型的数据,包括数字、字符串、函数、对象等等。一个数组可以包含任意数量的元素,每个元素可以通过一个索引值(从0开始)来访问。 数组的常用操作包括:创建数组、添加…

    JavaScript 2023年5月27日
    00
  • js window.event对象详尽解析

    那么首先介绍一下 “JS window.event对象详尽解析” 这个主题。 JS window.event对象详尽解析 在JavaScript中,事件对象是一种特殊的对象,用于存储事件发生时的相关信息,通过事件对象可以获取事件的类型、触发元素、鼠标位置、键盘按键信息等。其中,最常用的事件对象是window.event对象。下面是window.event对象…

    JavaScript 2023年5月27日
    00
  • js charAt的使用示例

    是的,我可以为你提供有关使用JavaScript中的charAt()方法的攻略。下面是完整的攻略,其中包含了两个实例: charAt() 方法的介绍 charAt() 是 JavaScript 字符串中的一种方法,它用于返回字符串中指定位置的字符。它也常用来检查字符串中是否包含想要的字符。该方法的语法如下: string.charAt(index) 其中,s…

    JavaScript 2023年5月19日
    00
  • js实现简单的网页换肤效果

    下面是关于“js实现简单的网页换肤效果”的完整攻略: 1. 实现思路 网页换肤效果的实现,主要是在页面加载时,用 JavaScript 动态修改 CSS 样式。 首先在页面加载时,向页面中插入一个切换主题样式的按钮或者下拉菜单,当用户点击这个按钮或者下拉菜单时,根据用户选择的样式,动态切换网页的样式。在这个过程中,需要掌握以下几个技能: 如何动态创建 &lt…

    JavaScript 2023年6月11日
    00
  • JavaScript style对象与CurrentStyle对象案例详解

    让我们来讲解一下“JavaScript style对象与CurrentStyle对象案例详解”的完整攻略。 什么是style对象? 在前端开发中,style对象是经常用到的一个对象。我们可以使用style对象来获取或修改指定元素的样式属性。通过style对象,我们可以直接通过JavaScript代码来修改网页的样式效果,而无需通过css文件修改。 如何获取s…

    JavaScript 2023年5月27日
    00
  • 原生js仿jquery一些常用方法(必看篇)

    “原生js仿jquery一些常用方法(必看篇)”是一篇文章,介绍了如何使用纯原生的JavaScript实现一些常见的jQuery方法。这些方法包括:选择器、事件绑定、DOM操作、特效等。 以下是这篇文章中介绍的一些内容: 选择器 在jQuery中,我们可以使用美元符号($)来简化选择器的书写。例如: $(“.my-class”) 在原生JavaScript中…

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