一点补环境的小东西

在补环境过程中遇到了 Object.getOwnPropertyDescriptor(HTMLElement.prototype,'offsetHeight')
在这里插入图片描述
然后我第一反应是结果是
在这里插入图片描述
但是如果这样写的话,就会全局多出一个offsetHeight方法,但是浏览器中是没有的,所以又到思考了另外一种方法请添加图片描述
但是采用这种的话,那么就会导致以下问题:
先看浏览器中的输出:
请添加图片描述
然后看看我们自己的环境输出:
请添加图片描述
就会发现我们的.get和get.toString()方法有问题,然后就想着去修改一些
请添加图片描述
然后本以为这样就结束啦,但是呢,又有一个新的问题
在这里插入图片描述
就差个toString的无限循环,然后又在去研究至尊宝大佬写的保护函数的代码,发现大佬还得是大佬,写得真好。爱了爱了。
最后的效果就是这样的:
请添加图片描述
但是后面发现,是有问题的,因为可以通过HTMLElement.prototype.offsetHeight获得值,所以经过查看this,然后去看真实的页面如何调用的,就发现了,他这个方法是实例(此实例的原型对象上必须有这个方法)调用的才能成功,如果原型调用就不会成功,所以我们就添加一个判断就能实现了。如图:
在这里插入图片描述
还有亿点问题,就是这里的条件判断应该为

!this.hasOwnProperty('offsetHeight') && this.constructor.name!='Object'

而不是 this.prototype=='undefined'
还有不足就是目前的条件只能判断

HTMLElement.prototype.offsetHeight
Object.getOwnPropertyDescriptor(HTMLElement.prototype,'offsetHeight').get()

这两种取值方法不合法,如果遇到其他的,条件可能还要写。不知道其他大佬是否有其他好的方法,能否请大佬留言指教一下。
效果如下:
在这里插入图片描述
但是还有瑕疵的地方就是每次返回的值是固定的,不过到时候可以根据具体情况修改一下。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值