?/* 关于原型链: ?? ? ?prototype:每个函数都右一个prototype属性,它指向一个对象,是调用函数的创建实例的原型 ?? ? ?_proto_:每个javascrpt对象都有一个_proto_属性,它指向该对象的原型 ?? ? ?constructor:这个是每个原型都有一个constructor属性,指向构造函数 ?? ? ? ?? ? ?那什么是原型呢?你可以这样理解:每一个JavaScript对象(null除外)在创建的时候就会与之关联另一个对象, ?? ? ?这个对象就是我们所说的原型,每一个对象都会从原型"继承"属性。 ?? ? ? ?? ? ?其实它是这样的prototype代表创建实例的对象,而_proto_是向链一样指向另一个prototype代表的的连接的实例的对象,所有可以解释为 ?? ? ?_proto_指向的是一个该对象的原型 ?? ? ? ?? ? ?所以它的执行顺序是:假设a实例创建,那么首先会查找a实例对象的上的属性方法,如果没有找到, ?? ? ?就是沿着_proto_去prototype身上去查找,如果还没 ?? ? ?也会沿着_proto_去prototype身上去查找,一致找到object为null为止 ?? ? ? ?? ? ?原型链的继承:*/ ?? ? ? ? function lop2(a,b){ ?? ??? ??? ? this.a=a ?? ??? ??? ? this.b=b ?? ??? ??? ? console.log(this.a) ?? ??? ??? ? ?console.log(this.b) ?? ??? ?} ?? ??? ?function lop(a,b){ ?? ??? ??? ?lop2.call(this,a,b) ?? ??? ?} ?? ??? ? lop(1,2) ?? ??? ? /* ?? ??? ? javascripr采用的是词法作用域:是静态作用域,所谓的静态作用域是:如下例子, ?? ??? ? ?如果是静态作用域,首先会先执行foo的函数区域,如果没有声明变量value,那么就去上一层的foo的全局作用域栈搜索,所有此时value为1 ?? ??? ? ? ?? ??? ? ?如果是动态作用域的话,那么此时foo的函区域如果没有value的值的话,那么就会往bar函数中区域找,然后得到value为2 ?? ??? ? ? 但javascript采用的是静态作用域*/ ?? ??? ? var value = 1; ?? ??? ?? ?? ??? ? function foo() { ?? ??? ? ? ? console.log(value); ?? ??? ? } ?? ??? ?? ?? ??? ? function bar() { ?? ??? ? ? ? var value = 2; ?? ??? ? ? ? foo(); ?? ??? ? } ?? ??? ?? ?? ??? ? bar(); ?? ??
|