原型继承:
a、基于类的继承(C, C++, Java等)
b、基于原型的继承(js)
把对象的属性proto称为对象的原型,对象的属性proto指向的是一个对象,指向的那个对象称为该对象的原型对象,因此对象可以直接访问原型对象上的属性和方法,我们把查找属性和方法的路径称为原型链。
1、构造函数、原型和实例的关系
function Person(name) {
this.name = name;
}
var person = new Persion(“小涛”);
Person称为persion对象的构造函数
person称为Person函数的实例
万物皆对象
proto 一般是对象的一个属性,也称为对象的原型(proto是一个不规范的属性,只是浏览器实现了该属性,标准的属性为[[prototype]])
prototype 一般是函数的原型
注意:大多数情况下 proto可以理解构造函数的原型 除了Object.create()方法除外
eg person.constructor.prototype === person.proto
构造器的原型可以理解为当前对象下的proto.constructor等于你定义的遍历下所有的方法
proto:
proto的三种实现方式:
1、字面量方式
var a = {};
console.log(a. proto === a.constructor.prototype) // true
// Function Object 函数 对象
console.log(Function. proto_ === Function.prototype) // true
console.log(typeof Object) function
console.log(Object. proto__ === Function.prototype); // true
=> Object. proto === Function.proto_
Object. _proto. _proto === Object.prototype;
Object.proto .proto !== Function.prototype;
Object.proto .proto. proto === Function.proto_. proto. _proto === null;
2、构造函数
var A = function(){}
var b = new A();
console.log(b.proto) // {}
console.log(b. proto_ === b.constructor.prototype) // true
b.constructor === A; // true
A.prototype. proto__ === Object.prototype // true;
Object.prototype. proto_ === null // true
3、Object.create
var c = {};
var d = Object.create(c);
console.log(d.proto); // {}
console.log(d. proto_ == c.constructor.prototype) // false
console.log(d. proto_ === c) // true