学习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 对象。
高洛峰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()
, 只能用在不传递任何参数的情况。如果构造函数返回了一个“对象”,那么这个对象会取代整个
出来的结果为步骤1创建的对象,ps:一般情况下构造函数不返回任何值,不过用户如果想覆盖这个返回值,可以自己选择返回一个普通对象来覆盖。当然,返回数组也会覆盖,因为数组也是对象。new
出来的结果。如果构造函数没有返回对象,那么new
出来的结果。如果构造函数没有返回对象,那么
即使 ES6 增加了类,也只是语法糖:🎜
class Book{}
typeof Book
"function"
女神的闺蜜爱上我2017-07-05 10:54:40
你理解错了构造函数的概念。
实际上,js里不应该有‘构造函数’这一说,而应该理解为函数的构造方法。意思是,任何函数都可以拿来new
一个,任何函数都可以叫做‘构造函数’。你在写所谓‘构造函数’的时候,有发现它和普通函数有什么区别吗,并没有吧,他们就是普通函数。
以上,es6箭头函数除外。