Maison  >  Questions et réponses  >  le corps du texte

javascript - N'est-ce pas une fonction littérale d'objet? Pourquoi avez-vous besoin d’une nouvelle initialisation ?

Je me souviens que ce n'est pas un constructeur. Pourquoi this et new sont-ils utilisés de la même manière que les constructeurs ?

淡淡烟草味淡淡烟草味2663 Il y a quelques jours839

répondre à tous(4)je répondrai

  • 学习ing

    学习ing2017-07-05 10:54:40

    Toute fonction en javascript, utilisez simplement new 关键字调用,它都可以被称作 构造函数.

    Lors de l'utilisation du mot-clé new pour appeler une fonction, un objet sera implicitement déclaré à l'intérieur de la fonction, puis l'objet lui sera attribué, et enfin cela sera renvoyé implicitement lors de l'utilisation du nouveau mot-clé pour appeler la méthode du livre de l'auteur. , c'est équivalent au processus suivant.

    function Book(id, bookname){
        var o = new Object();
        o.id = id;
        o.bookname = bookname;
        return o;
    }
    var b = Book(123,'javascript高级程序设计');

    Le o ici est en fait cet objet que nous voyons habituellement.

    répondre
    0
  • 高洛峰

    高洛峰2017-07-05 10:54:40

    Il n'y a pas de classes ou de constructeurs en JavaScript.

    function Book (){}
    
    // Book 是一个函数
    typeof Book
    "function"
    
    // Book 是 Function
    Book instanceof Function
    true
    
    // Book 是 Object
    Book instanceof Object
    true
    

    Utilisez new pour créer des objets

    var book = new Book()
    
    // book 是一个对象
    typeof book
    "object"
    
    // book 不是 Function 的实例
    book instanceof Function
    false
    
    // book 是 Object 的实例
    book instanceof Object
    true
    
    // book 是 Book 的实例
    book instanceof Book
    true
    

    Bien qu'il n'y ait pas de constructeur en js, ce mot est également utilisé dans la documentation MDN : https://developer.mozilla.org...

    Lorsque le code new foo(...) est exécuté :

    • Un nouvel objet est créé. Il hérite de foo.prototype.

    • Constructeur foo 被执行。执行的时候,相应的传参会被传入,同时上下文(this)会被指定为这个新实例。new foo 等同于 new foo(), ne peut être utilisé que lorsqu'aucun paramètre n'est transmis.

    • Si le constructeur renvoie un "objet", alors cet objet remplacera l'intégralité du new出来的结果。如果构造函数没有返回对象,那么newrésultat. Si le constructeur ne renvoie pas d'objet, alors le résultat sera l'objet créé à l'étape 1. ps : Généralement, le constructeur ne renvoie aucune valeur, mais si l'utilisateur souhaite remplacer cette valeur de retour, il peut choisir de renvoie un objet normal pour l'écraser. Bien entendu, le retour d'un tableau sera également écrasé, car les tableaux sont également des objets.

    Même si ES6 ajoute des classes, ce ne sont que du sucre syntaxique :

    class Book{}
    
    typeof Book
    "function"
    

    répondre
    0
  • 女神的闺蜜爱上我

    女神的闺蜜爱上我2017-07-05 10:54:40

    Vous avez mal compris la notion de constructeur.

    En fait, il ne devrait pas y avoir le terme « constructeur » en js, mais doit être compris comme la méthode de construction d'une fonction. Cela signifie que n'importe quelle fonction peut être utilisée et que n'importe quelle fonction peut être appelée un « constructeur ». Lorsque vous avez écrit ce que l'on appelle le « constructeur », avez-vous remarqué une différence entre celui-ci et les fonctions ordinaires ? Non, ce ne sont que des fonctions ordinaires ? new

    Ci-dessus, sauf la fonction flèche es6.

    répondre
    0
  • 習慣沉默

    習慣沉默2017-07-05 10:54:40

    Chaque fonction en js est équivalente à un constructeur (sauf pour la vraie fonction flèche ES6).
    Hé, incroyable js !

    répondre
    0
  • Annulerrépondre