JavaScript constructor&原型&原型继承
创始人
2024-11-05 11:37:48
0

constructor

在 JavaScript 中,构造函数是一种特殊的函数,使用 new 关键字来调用,用于创建对象实例。JavaScript 中的构造函数通常通过 function 关键字定义。

例如:

function Person(name, age) {     this.name = name;     this.age = age; } 

在这个例子中,Person 就是一个构造函数,用于创建 Person 类型的对象实例。构造函数内部使用 this 关键字来引用新创建的对象,并给对象赋予属性。

所有的 JavaScript 对象都有一个 constructor 属性,这个属性指向创建该对象的构造函数。例如,如果有一个 person 对象是通过 Person 构造函数创建的,那么 person.constructor 将指向 Person 函数本身。

JavaScript 中的 constructor 属性可以用于检查对象的类型或者动态创建对象,但需要注意的是,这个属性可以被改写,因此不应该完全依赖它来确定对象的类型。


原型(prototype)

在 JavaScript 中,每个对象都有一个原型对象(也称为 __proto__)。原型对象是其他对象的基础,它定义了对象的共享属性和方法。当你创建一个新对象时,该对象会从原型对象继承属性和方法。

  1. 对象原型链

     1)每个 JavaScript 对象(除了 null)都有一个原型链。原型链是通过 __proto__ 属性链接到原型对象的链式结构。  2)如果对象在自身找不到属性或方法,它会沿着原型链向上查找,直到找到该属性或方法或者到达原型链的顶部(即 Object.prototype)。
  2. Object.prototype

      1)Object.prototype 是所有对象的顶层原型对象。它包含 JavaScript 中所有对象共享的基本方法,例如 toString()hasOwnProperty() 等。 2)当你创建一个对象时,这个对象会自动连接到 Object.prototype,并继承其方法。

原型继承

原型继承是 JavaScript 中实现对象继承的一种有效方式,它利用了原型链的特性,使得对象可以共享属性和方法,并能通过原型链查找的方式实现继承。

// 定义一个父类 Person function Person(name, age) {     this.name = name;     this.age = age; }  // 在 Person 的原型上添加方法 Person.prototype.greet = function() {     return `Hello, my name is ${this.name}.`; };  // 定义一个子类 Student,通过原型链继承 Person function Student(name, age, school) {     // 调用父类的构造函数以初始化父类属性     Person.call(this, name, age);     this.school = school; }  // 设置 Student 的原型链以继承 Person Student.prototype = Object.create(Person.prototype); Student.prototype.constructor = Student;  // 在 Student 的原型上添加自己的方法 Student.prototype.study = function() {     return `${this.name} is studying at ${this.school}.`; };  // 创建 Student 的实例 let student = new Student('Alice', 20, 'XYZ University');  // 调用继承的方法 console.log(student.greet()); // 输出 "Hello, my name is Alice." console.log(student.study()); // 输出 "Alice is studying at XYZ University." 
1.创建父类 Person :
Person 是一个构造函数,它接受 name 和 age 参数,并将它们分配给新创建的对象的属性。 Person.prototype.greet 是一个方法,被Person 的所有实例继承。

 
2.创建子类 student :
Student 构造函数使用 person.ca1l(this,name,age)来调用父类 person 的构造函数,以确保子类实例可以正确初始化父类的属性;   0bject.create(Person.prototype)创建了一个新对象,这个对象的原型指向Person.prototype ,从而建立了 Student 的原型链。
3.继承和添加方法:
Student.prototype 现在包含了  Person.prototype的所有方法,因此 Student 实例可以访问到 greet()方法 ; 在 Student.prototype 上添加了 study()方法,这是 Student 类特有的方法,它不会影响到 Person 类或其它对象。

 
4.实例化和调用方法:
创建 Student 的实例 student 后,可以调用继承自 Person
和自身定义的方法

 instanceof

instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。

object instanceof constructor (object:实例对象,constructor:构造函数)

相关内容

热门资讯

9分钟发现!德扑ai智能机器人... 9分钟发现!德扑ai智能机器人平台安装(黑科技)外挂透明挂辅助挂(2023已更新)(哔哩哔哩)1、下...
wpk提高胜率(EV扑克)德州... wpk提高胜率(EV扑克)德州辅助软件线上(透视挂)都是真的有挂(有挂盈利)-今日头条EV扑克辅助器...
六分钟总结!nzt德州辅助软件... 六分钟总结!nzt德州辅助软件(辅助挂)外挂透明挂辅助插件(2023已更新)(百度知乎)1、nzt德...
wepoke辅助有挂(Wepo... wepoke辅助有挂(Wepoke)wepoke好友助力(透视)都是真的有挂(有挂新版)-抖音;1、...
9分钟科普!wpkai辅助(黑... 9分钟科普!wpkai辅助(黑科技)外挂透明挂辅助软件(2025已更新)(今日头条)亲,关键说明,w...
wpk透视辅助测试(线上wpk... wpk透视辅助测试(线上wpk德州)wepoke软件规律(透视挂)好像真的有挂(有挂德州版)-微博热...
9分钟理解!poker有外挂(... 9分钟理解!poker有外挂(软件透明挂)外挂透明挂辅助机制(2024已更新)(今日头条)1、pok...
WePoKe外 挂(poken... WePoKe外 挂(pokenow)来玩德州app辅助工具(透明黑科技)就是真的有挂(有挂安卓版)-...
4分钟晓得!微扑克辅助器是骗人... 4分钟晓得!微扑克辅助器是骗人(软件透明挂)外挂透明挂辅助工具(2020已更新)(哔哩哔哩)1、金币...
wepoke黑科技(wepoK... wepoke黑科技(wepoKe)wepoke辅助技巧(透视辅助)的确是有挂的(有挂安装)-哔哩哔哩...