一、原型函数
在 JavaScript 中,每个函数都被创建时都有一个函数原型(Function.prototype)属性,它是一个对象。在 JavaScript 中,函数原型对象是一个对象,它包含了函数的属性和方法。它是使用原型链实现继承的关键部分。函数原型对象有一个 constructor 属性,它指向函数本身。可以通过修改函数原型对象来添加新的属性和方法,从而使所有实例对象都能访问到这些属性和方法。
function MyClass() {
// constructor function
}
// 添加一个属性到 MyClass 的原型对象上
MyClass.prototype.myProperty = 'Hello';
// 添加一个方法到 MyClass 的原型对象上
MyClass.prototype.myMethod = function() {
console.log('World');
};
在这个例子中,MyClass.prototype
的属性和方法可以被该函数的所有实例访问,因为它们都共享同一个原型对象。
二、访问对象成员的原则
对象访问成员的机制
1 首先查找自身有没有,有就就近原则使用
2 自身没有该成员,通过__proto__找到原型对象,看原型对象上有没有,有就执行
3 假如原型对象上也没有,再找原型对象的__proto__ ,一直找到Object.prototype
4 一直找到Object.prototype,找不到就undefined
function Cat(name, age) {
// this.name = name
this.age = age
}
Cat.prototype.eat = function () {
console.log('猫抓老鼠')
}
Cat.prototype.name = '亚洲猫王'
const cat = new Cat('小花', 3) // {name: '小花', age: 3}
// 访问对象成员的原则: 先查找自己身上有没有,有的话就使用,没有去原型查找
console.log(cat.name)
三、三者关系
注意:Function也是一种构造函数,因此构造函数的__proto__就是Function的原型函数