好多人不理解原型就是不理解这到底是什么东西(我就是), 看完本篇文章应该可以理解个大概
原型是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也没有