在js中 prototype属性是只有函数才能调用到的 而 __proto__属性是只属于对象的
这里我们需要明白 __proto__的属性是永远由一个对象指向另一个对象的(就是指向它们的原型对象,也就是父对象) 也就是说
儿子-->爸爸-->爷爷 这也就是所谓的原型链
__proto__的作用就是,当我们访问一个对象中并不存在的属性时 __proto__便会去访问这个对象的爸爸,也就父级对象
若爸爸那里也没有便会去访问它的爷爷,一层一层往上查找它的原型对象,直到找到最上层还没有找到的话,便返回undeifined
上面这种由__proto__属性来连接对象 并一层一层往上直到null为止的链条,我们便称为原型链
在来谈谈prototype属性 首先它是函数独有的 它是由函数指向一个对象的(即指向它的原型对象),也就是这个函数所创建的实例的原型对象
prototype指向爸爸然后又由__proto__指向爷爷
也就是说 函数所创建的实列对象 . __proto__ === 函数 . prototype
prototype
属性的作用就是让该函数所实例化的对象们都可以找到公用的属性和方法。这里比方说,我为String对象创建一个公用
方法
String.prototype.repeatify=function(count){
var str = ""
for(let i=1;i<=count;i++){
str+=this+",";
}
return str;
}
//这里定义的repeatify的作用可以输出指定重复的字符
//那么我们这么写的话 现在所有string类型都可调用repeatify方法
//比如说
console.log('hello'.repeatify(3));//它将循环打印三个hello
constructor属性也是对象才拥有的,它是从一个对象指向一个函数,(含义就是指向该对象的构造函数),
每个对象都有构造函数(本身拥有或继承而来),
Function这个对象比较特殊,
它的构造函数就是它自己
(因为Function可以看成是一个函数,也可以是一个对象),
所有函数和对象最终都是由Function构造函数得来,所以constructor属性的终点就是Function这个函数。
以上为自己总结,若有错误,请随时指正