JS 原型链

一、创建对象的几种方法
//字面量创建
let obj = { key: 'value '}
//通过new Object创建
let obj = new Object({ key: 'value' })
//通过构造函数创建
let F = function () { this.key = 'value' }
let obj = new F()
//通过Object.create创建
let o = { key: 'value' }
let obj = Object.create(o)
//Object.create创建的对象是用原型链连接的  obj.__proto__ === o,就是将o赋值给obj的原型对象
二、原型链
  • instanceof

instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。

//实现instanceof功能
function instanceof (obj, fn) {
  //拿到obj的隐式原型
  let proto = obj.__proto__
  //遍历原型链
  while (proto) {
    //和fn的prototype进行比较
    if (proto === fn.prototype) {
      return true
    }
    //不相等 顺着原型链继续查找
    proto = proto.__proto__
  }
  //如果到了原型链的顶端还没找到 就返回false
  return false
}
三、new运算符
// 实现new方法
let new1 = function (func) {
  //第一步  创建一个空对象
  let obj = Object.create(func.prototype)
  //第二步  绑定上下文并执行构造函数
  let fn = func.call(obj)
  //判断构造函数返回的结果是不是对象,如果是就当做结果返回,不是就返回第一步所创建的对象
  if (typeof fn === 'object') {
    return fn
  } else {
    return obj
  }
}
let Foo = function () { this.name = 'value' }
let instance = new1(Foo)
console.log(instance) //Foo {name: 'value'}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容