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