1.对象的三角恋关系
1.每个"构造函数"中都有一个默认的属性, 叫做prototype
prototype属性
保存着一个对象, 这个 对象 称之为"原型对象
"
2.每个"原型对象"中都有一个默认的属性, 叫做constructor
constructor
指向当前原型对象对应的那个"构造函数
"
3.通过构造函数创建出来的对象我们称之为"实例对象"
每个"
实例对象
“中都有一个默认的属性, 叫做__proto__
, proto 指向创建它的那个构造函数的”原型对象
"
function Person(myName, myAge) {
this.name = myName;
this.age = myAge;
}
let obj1 = new Person("sss", 34);
console.log(Person.prototype);
console.log(Person.prototype.constructor);
console.log(obj1.__proto__);
2.Function构造函数
1.JavaScript中函数
是引用类型
(对象类型
)
既然
是对象
,所以也是通过构造函数创建出来的
,所有函数都是通过Function构造函数
创建出来的对象
2.JavaScript中只要是"函数"就有prototype属性
Function函数的
prototype属性
指向"Function原型对象
3.JavaScript中只要"原型对象"就有constructor属性
Function原型对象的
constructor
指向它对应的构造函数
4.Person构造函数是Function构造函数的实例对象, 所以也有__proto__属性
Person构造函数
的__proto__
属性指向Function原型对象
5. JavaScript函数是引用类型(对象类型), 所以Function函数也是对象
Function构造函数
也是一个对象
, 所以也有__proto__属性
Funtion构造函数的特殊点
Function构造函数
__proto__
属性指向"Function原型对象
function Person(myName, myAge) {
this.name = myName;
this.age = myAge;
}
let obj1 = new Person("sss", 34);
console.log(Function);
console.log(Function.prototype);
console.log(Function.prototype.constructor);
console.log(Function === Function.prototype.constructor); // true
console.log(Person.__proto__);
console.log(Person.__proto__ === Function.prototype); // true
3. Object函数
1. JavaScript中还有一个系统提供的构造函数
叫做Object
只要是函数都是"
Function构造函数
"的实例对象
2.只要是对象就有__proto__属性, 所以"Object构造函数"也有__proto__属性
"Object构造函数"的
__proto__属性
指向创建
它那个构造函数的"原型对象"
3.只要是构造函数都有一个默认的属性, 叫做prototype
prototype
属性保存着一个对象, 这个对象我们称之为"原型对象
"
4.只要是原型对象都有一个默认的属性, 叫做constructor
constructor
指向当前原型对象对应的那个"构造函数"
5.Object原型对象是对象所以也有__proto__属性
Object原型对象
的__proto__
属性指向NULL
function Person(myName, myAge) {
this.name = myName;
this.age = myAge;
}
let obj1 = new Person("lnj", 34);
console.log(Object);
console.log(Object.__proto__);
console.log(Object.__proto__ === Function.prototype); // true
console.log(Object.prototype);
console.log(Object.prototype.constructor);
console.log(Object.prototype.constructor === Object); // true
console.log(Object.prototype.__proto__); // null
4.函数对象完整关系图
- 1.
所有的构造函数
都有一个prototype
属性, 所有prototype
属性都指向自己的原型对象
- 2,所有的原型对象都有一个
constructor
属性, 所有constructor属性都指向自己的构造函数
- 3.所有函数都是
Function构造函数的实例对象
(Function函数时所有函数的祖先函数) - 4.所有
函数都是对象
, 包括Function构造函数 - 5.
所有对象都
有__proto__
属性 - 6.普通对象的
__proto__
属性指向创建它的那个构造函数对应的"原型对象"
- 7.所有对象的__proto__属性最终都会指向"Object原型对象"
- 8.
"Object原型对象"
的__proto__
属性指向NULL
function Person(myName, myAge) {
this.name = myName;
this.age = myAge;
}
let obj1 = new Person("lnj", 34);
console.log(Function.prototype.__proto__);
console.log(Person.prototype.__proto__);
console.log(Function.prototype.__proto__ === Person.prototype.__proto__);// true
console.log(Function.prototype.__proto__ === Object.prototype); // true
console.log(Person.prototype.__proto__ === Object.prototype); // true
5.原型链
1.什么是原型链
对象中__proto__组成的链条我们称之为原型链
2.对象在查找属性和方法的时候, 会先在当前对象查找
如果当前对象中找不到想要的, 会依次去上一级原型对象中查找
如果找到Object原型对象都没有找到, 就会报错
学习笔记❥(^_-),版权归Jonathan所有