uni-app Object.prototype 报Bug

uni-app Object.prototype 报Bug

开发环境 版本号 项目创建方式
Windows win 10 HBuilderX

示例代码:

Object.prototype.xiba = function(){console.log("xiba")};  
console.log(Object.prototype)  

import Vue from 'vue'  
import App from './App'  

Vue.config.productionTip = false  

App.mpType = 'app'  

const app = new Vue({  
    ...App  
})  
app.$mount()  

操作步骤:

  • 报错

预期结果:

  • 没有error

实际结果:

  • 全是error

bug描述:

使用

String.prototype.xiba = function(){};

不报错,能正常使用

使用

Object.prototype.xiba = function(){};

更多关于uni-app Object.prototype 报Bug的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app Object.prototype 报Bug的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在 uni-app 中修改 Object.prototype 会引发错误,而修改 String.prototype 不会,这通常是由于 JavaScript 的严格模式或框架内部机制导致的。uni-app 基于 Vue 和小程序环境,默认启用严格模式,禁止扩展原生对象的原型,以避免全局污染和潜在冲突。

原因分析:

  1. 严格模式限制:在严格模式下,向 Object.prototype 添加属性会抛出 TypeError,因为这会影响到所有对象,可能导致不可预测的行为。
  2. 框架封装:uni-app 和小程序环境对原生对象进行了封装和保护,防止开发者意外修改共享原型,确保代码稳定性和兼容性。

解决方案:

  • 避免直接修改 Object.prototype。如果需要扩展功能,建议使用以下方法:
    • 创建自定义工具类或模块,通过函数或类实现所需功能。
    • 使用 ES6 的 classObject.assign() 来扩展特定对象,而不是全局原型。

例如,替代方案:

// 自定义工具函数
const xibaUtil = {
  xiba: function(obj) {
    console.log("xiba", obj);
  }
};
// 使用:xibaUtil.xiba(someObject);
回到顶部