您的位置:首页技术文章
文章详情页

javascript - 这不是对象字面量函数吗?为什么要new初始化?

【字号: 日期:2023-03-12 18:43:43浏览:34作者:猪猪

问题描述

javascript - 这不是对象字面量函数吗?为什么要new初始化?

javascript - 这不是对象字面量函数吗?为什么要new初始化?

我记得这个不是构造函数啊,为什么this、new这些都跟构造函数用法一样?

问题解答

回答1:

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

回答2:

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

function Book (){}// Book 是一个函数typeof Book'function'// Book 是 FunctionBook instanceof Functiontrue// Book 是 ObjectBook instanceof Objecttrue

使用 new 可以创建对象

var book = new Book()// book 是一个对象typeof book'object'// book 不是 Function 的实例book instanceof Functionfalse// book 是 Object 的实例book instanceof Objecttrue// book 是 Book 的实例book instanceof Booktrue

虽然 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'回答3:

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

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

以上,es6箭头函数除外。

回答4:

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

标签: JavaScript
相关文章: