js原型,原型链的理解
原型
1.所有引用类型(函数、数组、对象)都拥有__proto__属性(隐式原型),属性值是一个普通的对象
2.所有函数都有一个prototype属性(显式原型)属性值是一个普通的对象
3.所有引用类型的__proto__指向它构造函数的prototype
var arr = [1,2,3]; arr.__proto__ === Array.prototype; //true
var obj = {};
obj.__proto__ === Object.prototype; //true
原型链
当访问一个对象的某个属性时,会先在这个对象本身属性上查找,如果没找到,则去它的__proto__隐式原型上查找,既它的构造函数的prototype,如果还没找到,就在它的构造函数的prototype的_proto__中查找,这样一层一层向上查找就会形成一个链式结构,我们称之为原型链。
this详解:
1.谁最终调用函数,this指向谁
a.this指向的永远只可能是对象
b.this指向谁不取决于this写在哪,而是取决于this在哪调用
2.this指向的规律(与函数调用的方式息息相关)
a.通过函数名 () 直接调用,this指向window
b.通过对象.函数名()调用的,this指向这个对象
c.函数通过数组的一个元素,通过数组下标调用的,this指向这个数组
d.函数作为window内置函数的回调函数调用时,this指向window,如setTimeout。seterval等
e.函数作为构造函数用new关键字调用时,this指向新new出来的对象
JS中,万物皆对象,但对象也是有区别的,分为普通对象和函数对象。