原型链类

javaScript

原型链是js的基础

1)、创建对象的有几种方式
// 字面量 const o1 = {name:'o1'} const o11 = new Object({name:'o11'}) // 显示构造函数 const M = function(){this.name='o2'} const o2 = new M() // Object.create const P = {name: 'o3'} const o3 = Object.create(P) // es6 Class class o4 { sayName() { console.log('o4') } } const o4a = new o4()
2)、原型、构造函数、实例、原型链

原型

3)、instanceof的原理

instanceof
原理:通过实例的原型是否引用构造函数的原型来判断,只要存在该原型链上的instaceof都会返回true。

function F(){} F.prototyep.name = 'yxf' const people = new F() people instanceof F // 结果为true people instanceof Object // 结果为true
4)、new运算符

① 创建一个新对象foo;
② 并将它的__proto__指向其构造函数的prototype,foo.__ proto __ = Foo.prototype;
③ 动态将this指向新对象,Foo.call(foo,arguments);
④ 执行函数体中的代码;
⑤ 放回新对象foo;

const new2 = function(func){ const o = Object.create(func.prototype) const k = func.call(o) if (typeof k === 'object'){ return k } else { return o } }

扩展知识

JS 中 proto 和 prototype 存在的意义是什么?
从__proto__和prototype来深入理解JS对象和原型链