一.构造函数
如果函数或者方法的调用之前加上new关键字,他就构成了构造函数的调用.,
构造函数的调用和普通函数,方法的调用在实参处理,调用上下文和返回值方面有不同
(1).实参处理不同
凡是没有形参的构造函数调用都可以省略圆括号
例子1-1:
- var o = new Object();
- /等价于var o = new Object;
(2)调用上下文的不同
调用构造函数创建一个新的空对象,这个对象继承自构造函数的prototype(原型).构造函数试图初始化这个新对象,并把这个新对象当做构造函数的调用上下文,所以在构造函数中this关键字可以用来引用这个新对象,也就能够在构造函数中初始化这个新对象.
例子1-2:
- function A()
- {
- this.a = 123;
- }
- var b = new A();//此时调用构造函数A,this指向的就是b对象(调用上下文).
- alert(b.a);
(3)返回值不同
构造函数通常不使用return关键字调用完毕之后会返回一个对象(就是新创建的这个对象)
二.this关键字
this是一个关键字,不是变量也不是属性.
this关键字没有作用域的限制,他只有下面几种情况
(1)一个函数被当做方法调用,则函数中的this指向的是调用它的对象
(2)一个函数被当做函数调用,则函数中的this指向的全局对象(非严格模式)或者是undefined(严格模式下)
特别注意:即使这个函数是个嵌套函数,this的指向也是和上面说的一样
(3)函数被当做构造函数调用,this就指向构造函数创建的新对象
例子2-1:
- var a = {};//创建一个新对象
- function A()
- {
- alert(this === a)
- }
a.func = A;//为a对象添加一个func属性,值为A函数;
a.func();//A函数当做方法调用,this指向的就是a对象 所以返回true
A();//A函数当做函数调用 this指向的就是全局对象所以返回false
三.instanceof操作符
实例对象 instanceof构造函数
例子3-1:
- <span style=“font-size:18px;”> var a = new Array();
- alert(a instanceof Array);//返回true
- alert(a instanceof Object);//返回true
- Alert(a instanceof String);//返回false
- </span>
a instanceof f;
理解instanceof是如何工作的:
(1)原型链:原型链简单的认为就是一个对象继承的原型对象组成的“链“;
a 的原型链上就有 Array.prototype Object.prototype
(2)instanceof如何工作:
首先计算构造函数的原型对象 f.prototype,然后就在对象a的原型链上查找f.prototype,
如果找到了,那么a就是f(或者f的父类)的实例,返回true;
如果找不到,那么a就不是f(或者f的父类)的实例,返回false;
特别注意:
(1)所有的对象都是Object的实例
因为所有的对象的原型链上都有Object.prototype;
(2)基本类型这个时候有些不同
- <span style=“font-size:18px;”>alert(“fsa” instanceof String);//返回false
- </span>
Leave a Reply