由于存在海量的库和工具,以及各种各样简化你开发的玩意儿,很多程序员开始在不深入了解底层的情况下开发应用。JavaScript就是这种现象的代言人。JavaScript作为一种最复杂的且流传最广泛的语言,很多的开发者被高层次库的使用吸引,同时将糟粕抽离。
尽管你在不深入了解的情况下仍可以开发值得称道的应用,但深入JavaScript绝对让你收益。对“怪异部分”的理解可以让高级开发者在芸芸众生中脱颖而出,另外,虽然JS的生态日新月异,但对“怪异部分”的理解依旧是所有其他工具的基础。理解了这些就会拓展你的视野,并且改变你看待开发过程的方式。
在我 之前的文章 中稍微提到过new
关键字,它创建了一个对this
的绑定。在面向对象语言中,new
关键字总是用于实例化一个类。
var dog = new Dog();
原理是类的构造函数被调用,并且实例化了新的对象。尽管JavaScript的语法非常相同,但使用new
在底层还是会引发不同行为
没有构造函数
首先,我们并不是必须要用一个类来生成对象。在JavaScript中我们可以用函数就能实现此目标。构造函数只不过是在调用时new
关键字放在其前面的普通函数而已。你可以说没有构造函数-只有构造函数调用,因为实际上所有的函数都可以被调用去创建对象。这并不是对象或者类或者任何特殊定义方式的一部分。
这里有几个构造函数调用经历的步骤,但我们只关注现在讨论的事项:
1.一个新对象被创建
2.this
被绑定到新对象上面
3.除非函数返回它自己的对象,否则调用将返回已构造的对象
function Person(name) { this.name = name }var person = new Person("Alex")console.log(person.name) // Alex
总结
总结一下,这并不是一个难懂的概念。要点就是要始终记得,任何函数都可以像构造函数一样被调用,并且会创建一个this
的绑定。
非常感谢阅读,期待你的反馈。