prototype与__proto__
prototype
是函数里的一个属性,是站在函数的角度来说的
__proto__
是对象里的一个属性(有的浏览器不支持),是站在对象的角度来考虑的
<script>
//定义一个函数
function a1(){
var a=10;
}
//创建一个对象
var aaa=new a1();
console.log(a1);
console.log(aaa);
console.log(a1.prototype);//function(函数) prototype
console.log(aaa.__proto__);//object(对象) __proto__
</script>
<script>
//函数
function a1(){
var a=10;
}
//对象
var aaa=new a1();
//打印a1函数 有三种方法
console.log(a1);
console.log(aaa.__proto__.constructor);
console.log(aaa.constructor);
</script>
继承关系问题(原型链)
在原型链上(父子关系上)可以进行属性共享
//定义一个函数
function A(){
var a=10;
}
//创建一个对象
var a=new A();
Object.prototype.country='China'//等价于 a.__proto__.__proto__.country='China'
//从object继承了country属性,所以输出的为China
console.log(a.country)//输出结果:China
A.prototype.country='America';
//对country值进行了重新赋值,所以输出America
console.log(a.country);//输出结果:America
//原型链
console.log(aaa.__proto__); //a1的原型
console.log(aaa.__proto__.__proto__); //object的原型
console.log(aaa.__proto__.__proto__.__proto__);//null