javaScript原型理解

参考资料

所有 JavaScript 对象都从原型继承属性和方法

1、对象的创建

在 JavaScript 中,几乎“所有事物”都是对象。
布尔是对象(如果用 new 关键词定义)
数字是对象(如果用 new 关键词定义)
字符串是对象(如果用 new 关键词定义)
日期永远都是对象
算术永远都是对象
正则表达式永远都是对象
数组永远都是对象
函数永远都是对象
对象永远都是对象
所有 JavaScript 值,除了原始值,都是对象。原始值指的是没有属性或方法的值。

在js中,创建对象有两种方法:对象字面量和使用new表达式

2、什么是原型

定义:原型是 Function 对象的一个属性,它定义了构造函数创建对象的公共祖先。通过该构造函数创建的对象可以继承该原型的属性和方法。原型也是对象。

通过构造函数创建对象:
function Person(name) {
this.name=name;
}
var person = new Person(“张三”);
Person 就是一个构造函数,我们使用 new 创建了一个实例对象 person。

每个函数都有一个 prototype 属性
每一个JavaScript对象(null除外)在创建的时候就会与之关联另一个对象,这个对象就是我们所说的原型,每一个对象都会从原型"继承"属性。

prototype

prototype是Function 对象才会有的属性
function Person() {}
Person.prototype.name = ‘张三’;
var person = new Person();
console.log(person .name) // 张三

javaScript原型理解

proto

每一个JavaScript对象(除了 null )都具有的一个属性,叫proto,这个属性会指向该对象的原型
function Person() {}
var person = new Person();
console.log(person.proto === Person.prototype); // true
javaScript原型理解
通过构造函数创建的实例,它的_proto_属性指向的是该构造函数的原型。

constructor

每个原型都有一个 constructor 属性指向关联的构造函数 实例原型指向构造函数
function Person() {
}
var person = new Person();
console.log( Person.prototype.constructor===Person);
console.log(person.constructor === Person);
javaScript原型理解
我们进行实例属性或方法查询时,首先对自身拥有的属性或方法进行查找,如果未查到,便会从原型中查找也就是 Person.prototype,直到查到结果为止。

原型链
javaScript原型理解