JS-5-prototype、__proto__

来源:互联网 发布:淘宝如何推广引流 编辑:程序博客网 时间:2024/06/06 14:15

1.只有函数才有prototype,是函数的一个属性,指向一个对象,这个对象里面有contrutor属性。指向函数 

是共有的,大家都可以用

2.__proto__指向构造器原形属性的函数对象,与之前的函数没有关系

ie没有这个属性,只供学习用,是私有的,只有对象才有(注:函数也是对象)


构造函数创建出来的对象,有.__proto__,指向的就是prototype

总结:

对象包括普通对象(Object)和函数对象(Function),其中普通对象只有__proto__属性(原型指针),函数对象有prototype属性,prototype属性包括constructor和__proto__。

__proto__用来继承。


function定义的对象有一个prototype属性,使用new生成的对象就没有这个prototype属性。    prototype属性又指向了一个prototype对象,注意prototype属性与prototype对象是两个不同的东西,要注意区别。在prototype对象中又有一个constructor属性,这个constructor属性同样指向一个constructor对象,而这个constructor对象恰恰就是这个function函数本身



function f1(){};
 var f2 = function(){};
 var f3 = new Function('str','console.log(str)');

 var o3 = new f1();
 var o1 = {};
 var o2 =new Object();

 console.log(typeof Object); //function
 console.log(typeof Function); //function
 console.log(typeof o1); //object
 console.log(typeof o2); //object
 console.log(typeof o3); //object
 console.log(typeof f1); //function
 console.log(typeof f2); //function
 console.log(typeof f3); //function 



var animal = function(){};
  var dog = function(){};

  animal.price = 2000;//
  dog.prototype = animal;
  var tidy = new dog();


  console.log(dog.price) //undefined
  console.log(tidy.price) // 2000


tidy.__proto__=dog.prototype

dog.prototype.__proto=animal.protype

tidy.__proto__.__proto__=animal.protype

所以,方法会向上寻找,找到animal的price.即2000