原型与原型链

时间:2023-02-06 13:55:39

记录一下js中比较基础且重要的原型链

<!doctype html>
<html lang="en">
<head>
<meta chatset="UTF-8>
<title>原型与原型链</title>
</head>
<script type="text/javascript">
function AAA() { // 内部语句
// this.prototype = {}
// this.prototype = new Object() // 与上面{} 效果相同
// 构造函数 (每个函数都是构造函数)
}
AAA.prototype.bbb = function () {
}
AAA.prototype.ccc = function () {
}
var bbb = new AAA() // 内部语句 this.__proto__ = AAA.prototype
console.log(AAA.prototype) // 原型对象(显式原型) 创建函数时添加的
console.log(AAA.prototype.constructor) // 构造函数
console.log(bbb.__proto__) // 原型对象(隐式原型) 创建对象的时候添加的

// 给原型对象添加属性(一般是方法)=》实例对象可以访问
</script>
</html>

原型与原型链

原型链(全称: 隐式原型连)

  • 所有函数的__proto__都相等(注意这里不是对象,是函数
  • 实例对象的隐式原型等于构造函数的显式原型
  • Object的原型对象是原型链的尽头 (Object.__proto__
  1. 读取对象属性值时,会自动到原型链中查找
  2. 设置对象的属性值时,不会查找原型链,如果当前对象中没有此属性,会直接添加此属性并设置值
  3. 方法一般会定义在原型中,属性一般通过构造函数定义在对象本身上

// Object是Function.prototype的实例对象

  • 所有函数的原型对象都是Object的实例对象,Object除外

1. 函数的显示原型指向的对象默认是空Object实例对象(但Object不满足)
2. 所有函数都是Function的实例(包含Function)
3. Object的原型对象是原型链的尽头

 

console.log(Object.prototype._proto_) // null