Contents
  1. 1. 如何理解原型?
    1. 1.1. 不纠结任何术语,比如说:“人是人他妈生的,妖是妖他妈生的。”
      1. 1.1.1. 1.人和妖都是对象,而人他妈和妖他妈就是构造函数,人他爸和妖他爸就是原型。
      2. 1.1.2. 2.人他妈如何才能正确找到人他爸,而不会找错呢?答案就是prototype属性,人他妈可以通过这条线准确的找到自己的老公(人他爸)。同理,人他爸可以通过constructor属性准确的找到自己的老婆(人他妈)。
      3. 1.1.3. 3.人他妈可以生很多的宝宝,但是这些宝宝只有一个粑粑。这就是原型的唯一性。
      4. 1.1.4. 4.通过人可以找到人他爸,在通过人他爸找到人他爸他爸,…,这样一条链就叫做原型链。
      5. 1.1.5. 5.原型链并不是无限无尽的,最终人他爸他爸…他爸不是人,而是null,也就是说最终原型链最终指向null。
      6. 1.1.6. 6.人他妈生的人长的像人他爸的样子,妖他妈生的妖会像妖他爸那样丑陋,这就叫做继承。
      7. 1.1.7. 7.人继承了人他爸的一切,人他爸继承了人他爸他爸的一切,…,这就是原型链继承。
      8. 1.1.8. 8.人恋爱了,她妈让人拿着房产去提亲,人若没有,就问人他爸;人他爸没有,就会问人他爸他爸…,这就是属性搜索原型。
      9. 1.1.9. 9.人继承了人他爸的发色,但是人可以来个洗剪吹。那么这就是说对象的属性可以自定义,会覆盖继承得到的属性。
      10. 1.1.10. 10.即使人洗剪吹变成了黄毛怪,但也无法改变人他爸的发色。人他妈生的弟弟妹妹不会是黄毛怪,这就是说对象无法改变原型的属性。
      11. 1.1.11. 11.人他爸爱嘚瑟,去趟泰国动个小手术又去趟韩国整个形,虽然还是人他爸,但相比从前,已是回炉再造啦。这就是原型的重写。也是原型的置换。
  2. 2. !!Code: show time!!
    1. 2.1. 原型的特性
      1. 2.1.1. 1、不可变性:对象无法修改其原型对象的任何成员
      2. 2.1.2. 2、唯一性:由同一函数创建出来的所有对象共享一个原型对象
      3. 2.1.3. 3、动态性 (就是可以用点会或者是【】来调用)
        1. 2.1.3.1. <1
        2. 2.1.3.2. <2
      4. 2.1.4. 4、继承性:每一个对象都继承自它的原型对象

如何理解原型?

不纠结任何术语,比如说:“人是人他妈生的,妖是妖他妈生的。”

1.人和妖都是对象,而人他妈和妖他妈就是构造函数,人他爸和妖他爸就是原型。

2.人他妈如何才能正确找到人他爸,而不会找错呢?答案就是prototype属性,人他妈可以通过这条线准确的找到自己的老公(人他爸)。同理,人他爸可以通过constructor属性准确的找到自己的老婆(人他妈)。

3.人他妈可以生很多的宝宝,但是这些宝宝只有一个粑粑。这就是原型的唯一性。

4.通过人可以找到人他爸,在通过人他爸找到人他爸他爸,…,这样一条链就叫做原型链。

5.原型链并不是无限无尽的,最终人他爸他爸…他爸不是人,而是null,也就是说最终原型链最终指向null。

6.人他妈生的人长的像人他爸的样子,妖他妈生的妖会像妖他爸那样丑陋,这就叫做继承。

7.人继承了人他爸的一切,人他爸继承了人他爸他爸的一切,…,这就是原型链继承。

8.人恋爱了,她妈让人拿着房产去提亲,人若没有,就问人他爸;人他爸没有,就会问人他爸他爸…,这就是属性搜索原型。

9.人继承了人他爸的发色,但是人可以来个洗剪吹。那么这就是说对象的属性可以自定义,会覆盖继承得到的属性。

10.即使人洗剪吹变成了黄毛怪,但也无法改变人他爸的发色。人他妈生的弟弟妹妹不会是黄毛怪,这就是说对象无法改变原型的属性。

11.人他爸爱嘚瑟,去趟泰国动个小手术又去趟韩国整个形,虽然还是人他爸,但相比从前,已是回炉再造啦。这就是原型的重写。也是原型的置换。

!!Code: show time!!

原型的特性

1、不可变性:对象无法修改其原型对象的任何成员

code block:
function A() {}
A.prototype.color = 'black';
var a = new A;
a.color = 'goldyellow';
var ad = new A;
console.log(ad.color); // black
console.log(A.prototype.color); // black
console.log(a.color); // goldyellow

2、唯一性:由同一函数创建出来的所有对象共享一个原型对象

function A() {}
A.prototype.color = 'black';
var a = new A;
var ad = new A;
console.log(a.__proto__ === ad.__proto__); // true
console.log(ad.color); // black
console.log(a.color); // black

3、动态性 (就是可以用点会或者是【】来调用)

<1

function A() {}
A.prototype.color = 'black';
var a = new A;
var ad = new A;
A.prototype.makefood = function (){ console.log('做饭饭.')}
a.makefood(); // 做饭饭
ad.makefood(); // 做饭饭

<2

function A() {}
A.prototype.color = 'black';
var a = new A;
A.prototype = {
constructor: A,
makeup: function() {
console.log('我会化妆.');
}
};
var na = new A;
console.log(a.color); // black
a.makeup();// 报错
na.makeup(); // 我会化妆.
console.log(na.color); // undefined

4、继承性:每一个对象都继承自它的原型对象

function A() {}
A.prototype.color = 'black';
var a = new A;
var na = new A;
console.log(a.color); // black
console.log(na.color);// black

Contents
  1. 1. 如何理解原型?
    1. 1.1. 不纠结任何术语,比如说:“人是人他妈生的,妖是妖他妈生的。”
      1. 1.1.1. 1.人和妖都是对象,而人他妈和妖他妈就是构造函数,人他爸和妖他爸就是原型。
      2. 1.1.2. 2.人他妈如何才能正确找到人他爸,而不会找错呢?答案就是prototype属性,人他妈可以通过这条线准确的找到自己的老公(人他爸)。同理,人他爸可以通过constructor属性准确的找到自己的老婆(人他妈)。
      3. 1.1.3. 3.人他妈可以生很多的宝宝,但是这些宝宝只有一个粑粑。这就是原型的唯一性。
      4. 1.1.4. 4.通过人可以找到人他爸,在通过人他爸找到人他爸他爸,…,这样一条链就叫做原型链。
      5. 1.1.5. 5.原型链并不是无限无尽的,最终人他爸他爸…他爸不是人,而是null,也就是说最终原型链最终指向null。
      6. 1.1.6. 6.人他妈生的人长的像人他爸的样子,妖他妈生的妖会像妖他爸那样丑陋,这就叫做继承。
      7. 1.1.7. 7.人继承了人他爸的一切,人他爸继承了人他爸他爸的一切,…,这就是原型链继承。
      8. 1.1.8. 8.人恋爱了,她妈让人拿着房产去提亲,人若没有,就问人他爸;人他爸没有,就会问人他爸他爸…,这就是属性搜索原型。
      9. 1.1.9. 9.人继承了人他爸的发色,但是人可以来个洗剪吹。那么这就是说对象的属性可以自定义,会覆盖继承得到的属性。
      10. 1.1.10. 10.即使人洗剪吹变成了黄毛怪,但也无法改变人他爸的发色。人他妈生的弟弟妹妹不会是黄毛怪,这就是说对象无法改变原型的属性。
      11. 1.1.11. 11.人他爸爱嘚瑟,去趟泰国动个小手术又去趟韩国整个形,虽然还是人他爸,但相比从前,已是回炉再造啦。这就是原型的重写。也是原型的置换。
  2. 2. !!Code: show time!!
    1. 2.1. 原型的特性
      1. 2.1.1. 1、不可变性:对象无法修改其原型对象的任何成员
      2. 2.1.2. 2、唯一性:由同一函数创建出来的所有对象共享一个原型对象
      3. 2.1.3. 3、动态性 (就是可以用点会或者是【】来调用)
        1. 2.1.3.1. <1
        2. 2.1.3.2. <2
      4. 2.1.4. 4、继承性:每一个对象都继承自它的原型对象