原型和原型链

构造函数:大写字母开头;

var a={};
var a=new Object();
var a=[];
var a=new Array();
function Foo(){};
var Foo=new Function (){}

使用instanceof判断一个函数是不是一个变量的构造函数

f instanceof Foo ; f instanceof Object    (true);

      eg:判断一个变量是不是数组: instanceof Array;

for in

    

 var item
for(item in f) {
     //高级浏览器已经在for in中屏蔽了原型属性
    //但是还是加上下面的判断,保证程序的健壮性
    if(f.hasOwnProperty(item))
        {}
 }

所有的引用类型

         都具有对象的特性,即可自由扩展属性,(null除外);

         都有一个_proto_(隐式原型)属性,属性值是一个普通的对象;

        _proto_(隐式原型)属性值指向他的构造函数的prototype(显式原型)属性值;(===)

所有的函数

       ①都有一个prototype(显式原型)属性,属性值是一个普通的对象;

       ②当试图得到一个对象的某个属性时,如果这个对象本身没有这个属性,

             那么会去他的  _proto_(即他的构造函数的prototype)中查找;         

               f._proto_==Foo.prototype

       ③ 当试图得到一个对象的某个属性时,如果这个对象本身没有这个属性,

              且他的  _proto_(即他的构造函数的prototype)也没有这个属性 ,

              那么会去他的  _proto_的_proto_中查找(即他的构造函数的构造函数的prototype)(即f._proto_._proto_);                    

               f._proto_. _proto_==Foo.prototype._proto_==Object.prototype;

              注意:Object._proto_==null;

原文地址:https://www.cnblogs.com/sunmarvell/p/8660576.html