gpt4 book ai didi

javascript - Javascript 的内部实现

转载 作者:行者123 更新时间:2023-12-04 09:06:46 25 4
gpt4 key购买 nike

关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。












想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。

去年关闭。




Improve this question




最近开始学习JS,主要原因——想学习node和相关框架。
我已经开始从 freecodecamp 做一些基本的教程,并引用了 Mozilla MDN 的文档。
我已经开始使用 ES6 构造函数并坚持使用一些东西。以下是详细信息:

class Book {
constructor(author) {
this._author = author;
}
// getter
get writer() {
return this._author;
}
// setter
set writer(updatedAuthor) {
this._author = updatedAuthor;
}
}
getter 和 setter 的调用很奇怪,来自 Java,但没关系。适应 !!
const ALEPH = new Book("Paulo Coelho");
let writtenBy = ALEPH.writer;
ALEPH.writer = "So we changing Authors now !!"
在考虑以下方面时,上述代码(语法)是有意义的:
const person = {
name: "Taylor",
sayHello() {
return `Hello! My name is ${this.name}.`;
}
};
而那个类并不是一个真正的类形式的 OOP 概念,而是一个叫做构造函数的模板。

It should be noted that the class syntax is just syntax, and not a full-fledged class-based implementation of an object-oriented paradigm, unlike in languages such as Java, Python, Ruby, etc.


这是有道理的,getter 和 setter 是如何被调用的,因为它们只是持有一个函数的对象的键/属性。
如果我的理解有误或我需要在技术上更正确,请纠正我
问题是,我上网查了一下 getset关键字在内部执行。
我已经找到了实现以及如何使用它们,而不是它们在内部做什么。
  • 如果您可以向我推荐任何讨论其内部工作的文档。

  • Java ,我可以很容易地引用内部实现,或者在关键字的情况下,查找 Java 规范或 JVM 规范以了解幕后发生的事情。我正在为 JS 寻找类似的东西。引用此类官方文档会很好。
    题:
  • get 和 set 关键字是如何在内部实现的?
  • 任意 官方文档 对于 JS,就像我们对于 Python 或 Java 一样。

  • 谢谢。

    最佳答案

    不要被 ES6 分心功能( classextends 等...)。没有什么像 classclass based inheritanceJavaScript .他们只是 语法糖 在原生 JavaScript 上 功能 . functions是 JavaScript 中的第一类对象。
    例如 预订 上面的类将在 ES5 中转换如下使用 babel repl

    "use strict";

    function _instanceof(left, right) { if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) { return !!right[Symbol.hasInstance](left); } else { return left instanceof right; } }

    function _classCallCheck(instance, Constructor) { if (!_instanceof(instance, Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

    function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

    function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

    var Book = /*#__PURE__*/function () {
    function Book(author) {
    _classCallCheck(this, Book);

    this._author = author;
    } // getter


    _createClass(Book, [{
    key: "writer",
    get: function get() {
    return this._author;
    } // setter
    ,
    set: function set(updatedAuthor) {
    this._author = updatedAuthor;
    }
    }]);

    return Book;
    }();
    看看如何 getset转换为 ES5 .
    MDN docs足以洞察 JavaScript和它的特点。
    最后的话 : 尽量避免比较 JavaJavaScript .把它当作东西来学习 新品 .

    关于javascript - Javascript 的内部实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63424559/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com