Function.prototype.a=()=>{
console.log('aaaaa')
}
Object.prototype.b=()=>{
console.log('bbb')
}
function A(){
this.name = 'user'
}
A.prototype.c=()=>{
console.log('ccc')
}
const a=new A()
a.a(); // "error" "TypeError: a.a is not a function"
a.b(); // "bbb"
a.c(); // "ccc"
A.a(); // "aaaaa"
A.b(); // "bbb"
A.c(); // "error" "TypeError: A.c is not a function"
在JS中,所有对象都是 Object 的实例,Object是原型链的源头
console.log(Object.prototype.__proto__); // null
a是A的实例,可以访问A原型上的方法 c()
,b()
在Object原型上,任何对象都可以访问到 b()
函数
Object.prototype.b=()=>{
console.log('bbb')
}
const obj={};
obj.b(); // "bbb"
方法 a()
在 Function 原型上,A 是 Function 的实例,因此 A 可以访问到 a()
,原型链是通过 __ proto __ 指向查找的
实例中的指针只指向原型,而不是构造函数
因此实例 a 并不能访问到 a()
关于原型与构造函数的关系:
每个函数都有一个 prototype
属性指向该函数的原型对象,而所有的原型对象都会获得一个 constructor
这个属性包含了一个指向 prototype
属性所在函数的指针
网友评论