JavaScript 原型与继承机制详解(7)

  关于 Object.create() 方法要注意的一点是,如果参数为 null 那么会创建一个空链接的对象,由于这个对象没有任何原型链,所以说它不具有任何原生的方法,也无法进行原型的判断操作,这种特殊的对象常被称作“字典”,它完全不会受原型链的干扰,所以说适合用来存储数据:

1 var obj = Object.create(null);
2 obj.x = 1
3
4 var bar = Object.create(obj);
5 bar.y = 2;
6
7 console.log(Object.getPrototypeOf(obj));  //null
8
9 console.log(Object.prototype.isPrototypeOf(obj));  //false
10
11 console.log(obj instanceof Object);  //false
12
13 console.log(bar.x);  //1
14
15 obj.isPrototypeOf(bar);  //TypeError: obj.isPrototypeOf is not a function
16
17 /**
18 * 注意由于对象没有关联到 Object.prototype 上面,所以无法调用原生方法,但这并不影响此对象的关联操作。
19  */

 总结

  原型链是 JavaScript 当中非常重要的一点,同时也是比较难理解的一点,因为其与传统的面向对象语言有着非常大的区别,但这是正是 JavaScript 这门语言的精髓所在,关于原型与原型链,我们需要知道以下这几点:

  JavaScript 通过原型来实现继承操作;

  几乎所有对象都有原型链,其末端是 Object.prototype;

  原型链上的 [[getter]] 操作会遍历整条原型链,[[setter]] 操作只会针对于当前对象;

  我们可以通过修改原型链上的方法来添加我们想要的操作(最好不要这样做);

  关于 JavaScript 原型链,在一开始人们都称为“继承”,其实这是一种不严谨的说法,因为这不是标准的面向对象方法,不过初期人人常常这么理解。现在我往往称之为关联委托,关联指的是一个对象关联到另一个对象上,而委托则指的是一个对象可以调用另一个对象的方法。

  本篇文章均为个人理解,如有不足或纰漏,欢迎在评论区指出。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/9fffa9f22ed89d78b1b09dc5ec45d6c5.html