在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
看完这篇文章,你会发现,原型、原型链原来如此简单! 上面经典的原型链相等图,根据下文的学习,你会轻易掌握。 一、原型、原型链相等关系理解首先我们要清楚明白两个概念:
这两个概念大家跟我一起读三遍并记住,后面会用到 那么
这两个概念大家跟我一起读三遍并记住,后面会用到
function Person(name, age){ this.name = name; this.age = age; } Person.prototype.motherland = 'China'
let person01 = new Person('小明', 18); js之父在设计js原型、原型链的时候遵从以下两个准则 Person.prototype.constructor == Person // **准则1:原型对象(即Person.prototype)的constructor指向构造函数本身** person01.__proto__ == Person.prototype // **准则2:实例(即person01)的__proto__和原型对象指向同一个地方** 这两个准则大家跟我一起读三遍并记住,后面会用到 记住以上四个概念两个准则,任何原型链相等判断都能判断正确; 大家可以对照上图,看看自己概念准则是否弄清楚了,一定要对照上图哦 // 从上方 function Foo() 开始分析这一张经典之图 function Foo() let f1 = new Foo(); let f2 = new Foo(); f1.__proto__ = Foo.prototype; // 准则2 f2.__proto__ = Foo.prototype; // 准则2 Foo.prototype.__proto__ = Object.prototype; // 准则2 (Foo.prototype本质也是普通对象,可适用准则2) Object.prototype.__proto__ = null; // 原型链到此停止 Foo.prototype.constructor = Foo; // 准则1 Foo.__proto__ = Function.prototype; // 准则2 Function.prototype.__proto__ = Object.prototype; // 准则2 (Function.prototype本质也是普通对象,可适用准则2) Object.prototype.__proto__ = null; // 原型链到此停止 // **此处注意Foo 和 Function的区别, Foo是 Function的实例** // 从中间 Function Object()开始分析这一张经典之图 Function Object() let o1 = new Object(); let o2 = new Object(); o1.__proto__ = Object.prototype; // 准则2 o2.__proto__ = Object.prototype; // 准则2 Object.prototype.__proto__ = null; // 原型链到此停止 Object.prototype.constructor = Object; // 准则1 Object.__proto__ = Function.prototype // 准则2 (Object本质也是函数); // 此处有点绕,Object本质是函数,Function本质是对象 Function.prototype.__proto__ = Object.prototype; // 准则2 (Function.prototype本质也是普通对象,可适用准则2) Object.prototype.__proto__ = null; // 原型链到此停止 // 从下方 Function Function()开始分析这一张经典之图 Function Function() Function.__proto__ = Function.prototype // 准则2 Function.prototype.constructor = Function; // 准则1 由此可以得出结论: 除了 Object.prototype.__proto__ = null; Array.prototype.__proto__ = Object.prototype; Foo.prototype.__proto__ = Object.prototype; 二:原型、原型链的意思何在
|
请发表评论