学习js这么久,一直对js原型半知半解。今天就将自己所看到的相关文章整理并记录下。
1.什么是原型
a.每一个对象都有原型,使用属性_proto_引用,(除了null)。用于指向创建它的构造函数的prototype
b.原型就是该对象表示从哪里继承。通过它可以实现属性继承。
2. _proto_和prototype 的区别
_proto_:是每一个对象都有的属性。原型链中真正起作用的是_proto_。
prototype:是函数才有的属性。
3.构造函数
- 与普通函数相比,构造函数并没有任何特别的地方,首字母大写只是我们约定的小规定,用于区分普通函数;
- new关键字让构造函数具有了与普通函数不同的许多特点,而new的过程中,执行了如下过程:
- 声明一个中间对象;
- 将该中间对象的原型(_proto_)指向构造函数的原型(prototype);
- 将构造函数的this,指向该中间对象;
- 返回该中间对象,即返回实例对象。.
4.constructor
所有的原型都有一个constructor属性,该属性对应创建所有指向该原型的实例的构造函数。
函数和原型通过prototype和constructor属性进行相互关联.
Function.prototype.constructor === Function //true
Object.prototype.constructor === Object //true
Object.prototype.constructor === Object //true
// 声明构造函数
function Person(name, age) {
this.name = name;
this.age = age;
}
// 通过prototye属性,将方法挂载到原型对象上
Person.prototype.getName = function() {
return this.name;
}
var p1 = new Person('tim', 10);
var p2 = new Person('jak', 22);
console.log(p1.getName === p2.getName); // true
5.原型链
6.原型VS构造函数
通过构造函数设置的属性,是每个实例对象私有的属性,无法共享。
通过原型继承来的属性,是各个实例对象共享的属性,是共有的
相关网页:
http://www.108js.com/article/article1/10201.html?id=1092
https://juejin.im/post/5835853f570c35005e413b19
http://www.jianshu.com/p/15ac7393bc1f
http://www.jb51.net/article/80109.htm