javascript - Ist das nicht eine Objektliteralfunktion? Warum benötigen Sie eine neue Initialisierung?
淡淡烟草味
淡淡烟草味 2017-07-05 10:52:40
0
4
880

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

淡淡烟草味
淡淡烟草味

Antworte allen(4)
学习ing

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 对象。

小葫芦

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"
女神的闺蜜爱上我

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

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

以上,es6箭头函数除外。

習慣沉默

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

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage