javascript - 这不是对象字面量函数吗?为什么要new初始化?
淡淡烟草味
淡淡烟草味 2017-07-05 10:52:40
0
4
878

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

淡淡烟草味
淡淡烟草味

全部回复(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!

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板