class其实是function的语法糖,底层继承实现还是原型链
定义在原型上的方法与定义在构造函数内部的方法不同
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.greet = function() {
console.log("Hello, my name is " this.name);
};
const person = new Person("Alice", 25);
function Person(name, age) {
this.name = name;
this.age = age;
this.greet = function(){
console.log("Hello, my name is " this.name);
}
}
const person = new Person("Alice", 25);
这两个函数有什么不同?
这两个构造函数的功能是一样的,都可以创建一个具有 name
、age
属性以及 greet
方法的 Person
对象。然而,它们的实现方式略有不同:
- 在第一个构造函数中,
greet
方法是定义在Person
的原型(prototype
)上的。这意味着所有通过该构造函数创建的对象实例都将共享同一个greet
方法。这种方法更加高效,因为在内存中只有一个greet
方法的副本。
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.greet = function() {
console.log("Hello, my name is " this.name);
};
const person = new Person("Alice", 25);
- 在第二个构造函数中,
greet
方法是在构造函数内部作为对象实例的一个属性定义的。这意味着每个通过该构造函数创建的对象实例都会拥有自己的greet
方法副本。虽然这种实现可以满足功能需求,但它在内存使用上不够高效,因为每个实例都有自己的greet
方法副本。
function Person(name, age) {
this.name = name;
this.age = age;
this.greet = function() {
console.log("Hello, my name is " this.name);
};
}
const person = new Person("Alice", 25);
尽管这两个构造函数都可以创建具有相同功能的 Person
对象,但从性能和内存使用的角度来看,第一个构造函数(将方法定义在原型上)是更好的选择。
class底层如何实现的?class是特殊的function?
是的,JavaScript 中的 class
语法实际上是基于原型继承和构造函数的语法糖。底层实现依然是使用构造函数和原型链。class
只是一种更简洁、更易于理解的方式来实现面向对象编程。
当你使用 class
关键字定义一个类时,JavaScript 引擎会在底层创建一个特殊的函数(构造函数)。这个构造函数具有与普通函数相同的行为,但它在语义上被视为一个类。类中定义的方法会被添加到构造函数的原型对象中。
例如,以下是一个使用 class
关键字定义的类:
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
greet() {
console.log("Hello, my name is " this.name);
}
}
底层,这个类会被转换为一个与以下代码类似的构造函数和原型对象:
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.greet = function() {
console.log("Hello, my name is " this.name);
};
class
关键字不仅让代码更简洁易读,还提供了一些额外的功能,如基于类的继承(通过 extends
关键字实现)和访问控制(通过 private
和 public
修饰符实现)。尽管如此,class
的底层实现仍然是基于原型继承和构造函数的。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhghakbj
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13