Heim  >  Fragen und Antworten  >  Hauptteil

javascript - Ist das nicht eine Objektliteralfunktion? Warum benötigen Sie eine neue Initialisierung?

Ich erinnere mich, dass dies kein Konstruktor ist. Warum werden this und new genauso verwendet wie Konstruktoren?

淡淡烟草味淡淡烟草味2663 Tage vor837

Antworte allen(4)Ich werde antworten

  • 学习ing

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

    javascript 中的任何函数只要用 new 关键字调用,它都可以被称作 构造函数

    当使用 new 关键字调用函数时,函数内部会隐式地声明一个对象,然后把这个对象赋给 this,最后再隐式地返回 this. 使用 new 关键字调用楼主的 book 方法时,就相当于以下过程。

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

    这里的 o 其实就是我们平时看到的 this 对象。

    Antwort
    0
  • 高洛峰

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

    javascript 里面没有类,也没有构造函数。

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

    使用 new 可以创建对象

    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
    

    虽然 js 中没有构造函数,但是 MDN 文档中也使用了这个词:https://developer.mozilla.org...

    当代码 new foo(...) 执行时:

    • 一个新对象被创建。它继承自 foo.prototype.

    • 构造函数 foo 被执行。执行的时候,相应的传参会被传入,同时上下文(this)会被指定为这个新实例。new foo 等同于 new foo(), 只能用在不传递任何参数的情况。

    • 如果构造函数返回了一个“对象”,那么这个对象会取代整个new出来的结果。如果构造函数没有返回对象,那么new出来的结果为步骤1创建的对象,ps:一般情况下构造函数不返回任何值,不过用户如果想覆盖这个返回值,可以自己选择返回一个普通对象来覆盖。当然,返回数组也会覆盖,因为数组也是对象。

    即使 ES6 增加了类,也只是语法糖:

    class Book{}
    
    typeof Book
    "function"
    

    Antwort
    0
  • 女神的闺蜜爱上我

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

    你理解错了构造函数的概念。

    实际上,js里不应该有‘构造函数’这一说,而应该理解为函数的构造方法。意思是,任何函数都可以拿来new一个,任何函数都可以叫做‘构造函数’。你在写所谓‘构造函数’的时候,有发现它和普通函数有什么区别吗,并没有吧,他们就是普通函数。

    以上,es6箭头函数除外。

    Antwort
    0
  • 習慣沉默

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

    js里面每个函数都是相当于一个构造函数(除了真ES6箭头函数)。
    哎,神奇的js!

    Antwort
    0
  • StornierenAntwort