Js的原型和原型链理解

好多人不理解原型就是不理解这到底是什么东西(我就是), 看完本篇文章应该可以理解个大概

原型是Js强大的功能之一, 在JS面向对象编程里, 原型是必不可少的知识储备

Js有五种基本类型: String, Number, Boolean, undefined和null, 还有三种引用类型: Array, Object, Function

例如对于array类型, 也有join, reverse, pop, shift等方法供我们调用 

let arr = [];

空空的数组,可是为什么会有方法供我们调用呢?  (这应该是很多人理解原型的切入点)

每一个Js对象创建时都会从相应的原型继承基本的方法, 说白了就是其实我们使用的对象自带的方法保存在一个(或多个)对象里面, 这个对象就是原型

函数有prototype属性和原型连接, 对象有[[proto]]属性(这不是一个标准方法, 但几乎每一个浏览器都提供一个__proto__来模拟)和原型连接, 并且和构造函数连接的原型是一个对象.

以下在浏览器console里面运行:

function test() {}
var test1 = new test();
test.prototype === test1.__proto__
// 结果是true

一直说的基于原型链的面向对象编程, 就是js的原型不是一成不变的, 我们可以通过这样的代码改变原型:

function test() {}
test.prototype = new function()

如果需要共享的方法, 把它定义在new的function里面就可以了

还有:

let obj = new Object(null);

这段Js代码会创建一个obj对象, 但是这个对象却继承于null, 所以,不会有任何内置方法, 就连最基础的tostring也没有

原文地址:https://www.cnblogs.com/jedenzhan/p/8728422.html