直接调用构造函数与使用 new 的区别
var Fn = function (){
this.a = 1;
this.b = function (){
//...
}
var c = 2;
}
-
直接调用构造函数
直接调用构造函数,就和普通函数一样按顺序执行即可.
但是需要注意的是如果直接在全局中直接调用,函数中的 变量
a,b
就跑到全局中了(可以在全局中访问到)这是为什么呢?
首先要明白
this
的作用,在这里因为Fn()
在全局中调用,函数中的this
(this引用的是函数执行的环境对象,只有代码在执行是才能确定this的指向)指针 指向了 全局对象window
,因此相当于在全局中执行了赋值语句window.a = 1``window.b = fn(){ }
… -
使用
new
任何函数,都可以可以通过new
操作符来调用,那它就可以作为构造函数(构造函数其实就是用来返回对象的)。
而我们规定构造函数的函数名应该以一个大写字母开头,主要是为了区别ECMAscript中其他函数。若要用构造函数创建对象,需要使用
new
操作符。这种方式调用构造函数会经历以下4个步骤:
1. 创建一个新对象。
2. 将构造函数的作用域的赋给新对象(因此this就指向了这个新对象)。
3. 执行构造函数中的代码。(为这个新对象添加属性)。
4. 返回新对象。
欢迎指正错误,新手,多多包涵!(之后会尽可能完善文章)