手写js的方法,持续更新

每天至少一个手写方法,简略实现javascript的一些内置方法,有问题请指出~~~

文章目录

1.extend

2021-6-2

function _extends(...arg) {

  const res = {};

  for (let index = 0; index < arg.length; index++) {
    const obj = arg[index];
    for (const v in obj) {
    // 这里的Object.hasOwnProperty.call下面讲解一下
      if (Object.hasOwnProperty.call(obj, v)) {
        const element = obj[v];
        if (typeof element === "object") res[v] = _extends(element);
        else
          res[v] = element;
      }
    }
  }
  
  return res;
}
// 以下是测试参数
const place = { address: "2999弄" };
const father = { son: "3" };
const parent = { father, mother: "2" };
const param1 = { name: "a" };
const param2 = { age: 20, sex: "man" };
const param3 = { place: place, parent: parent };

let res = _extends(param1, param2, param3);

place.address = "abc"; // 检测是不是深拷贝
father.son = "999"; // 检测是不是深拷贝
console.log(place, res);

// 对象也可以深拷贝,时间:15分钟

补充:Object.hasOwnProperty.call
在这里插入图片描述
以上摘自https://www.cnblogs.com/weiqinl/p/8683207.html#!comments
总结:

  • hasOwnProperty不是一个敏感词,可以被用户重写
  • 如果是通过Object.create(null)出来的空对象是没有原型属性的,自然没有hasOwnProperty方法
  • obj重写了hasOwnProperty方法,obj.hasOwnProperty(“key”)将永远返回false
const obj = {
  hasOwnProperty:()=>{
	return false;
  }
}
  • 同上,重写了obj.prototype的hasOwnProperty方法

所以Object.prototype.hasOwnProperty(obj,“key”)就是保证hasOwnProperty方法是Object原型链上的那个方法,而不是我们修改后的

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值