javascript对象问题
原型链问题
var obj= {name: 'seven'};
var A = function(){};
A.prototype = obj;
var a = new A();
console.log(a.__proto__ === A.prototype);
console.log(a.name);
以上代码的对象指向问题:
当对象继承查找发生时,新对象隐藏的属性proto(某些浏览器会将其暴露出来,firefox,chrome)指向自己的构造函数的A.prototype属性,该构造函数的prototype直接指向父对象,这就是原型链。也就是说构造函数会通过自己在新对象和父对象中间建立关系。
在javascript中基本上万物皆对象,和一般语言的面向对象有很大区别。其他语言都是,先有模具(类),然后浇筑(实例化),产生新的对象。但是javascript却是和细胞一样,将自己复制一份产生一个新的细胞。
this指向
- 作为对象方法调用时,this指向该对象
- 作为普通函数调用时,this指向全局对象即window
- 构造器中的this指向返回的那个对象,显式的返回对象,this指向被返回的对象
- call和apply将动态的传入函数的this
apply和call
apply接受两个参数,第一个参数指向指向函数体内的对象,第二个为数组或类数组,将作为被传递给函数的参数
var func = function(a, b, c){ alert([a, b, c]); }; func.apply(null, [1, 2, 3]);
call接受的参数不固定,第一个参数和apply中的一样,后面的依次传入
var func = function(a, b, c){ alert([a, b, c]); }; func.call(null, 1, 2, 3);
第一个参数设置为null时,函数内的this指向默认的数组对象,在浏览器中是window,在ES5的严格模式下为null