uni-app APP无法获取main.js中自己添加的数组原型上的方法

uni-app APP无法获取main.js中自己添加的数组原型上的方法

开发环境 版本号 项目创建方式
Windows wini10专业版 HBuilderX

产品分类:uniapp/App

PC开发环境操作系统:Windows

PC开发环境操作系统版本号:wini10专业版

HBuilderX类型:正式

HBuilderX版本号:3.4.3

手机系统:Android

手机系统版本号:Android 8.0

手机厂商:小米

手机机型:k30pro

页面类型:vue

vue版本:vue2

打包方式:云端

示例代码:

Vue.config.productionTip = false  
Array.prototype.remove || (Array.prototype.remove = function remove(val, isDelete) {  
    let index = this.indexOf(val)  

    if (index > -1) {  
        let isBack = this.splice(index, 1)  
        return isDelete ? isBack : this  
    }  
    return isDelete ? null : this  
})  
App.mpType = 'app'  
const app = new Vue({  
    // i18n,  
    store,  
    ...App  
})  

app.$mount()  

使用

data() {  
    return {  
        list: [  
            '1111',  
            '2222',  
            '3333'  
        ]  
    };  
},  
methods:{  
delItem(i) {  
    console.log(this.list.remove);  
    this.list.remove(i);  
    }  
}

操作步骤:

Vue.config.productionTip = false  
Array.prototype.remove || (Array.prototype.remove = function remove(val, isDelete) {  
    let index = this.indexOf(val)  

    if (index > -1) {  
        let isBack = this.splice(index, 1)  
        return isDelete ? isBack : this  
    }  
    return isDelete ? null : this  
})  
App.mpType = 'app'  
const app = new Vue({  
    // i18n,  
    store,  
    ...App  
})  

app.$mount()  

使用

data() {  
    return {  
        list: [  
            '1111',  
            '2222',  
            '3333'  
        ]  
    };  
},  
methods:{  
delItem(i) {  
    console.log(this.list.remove);  
    this.list.remove(i);  
    }  
}

预期结果:

能访问到自定义的数组原型上的方法

实际结果:

获取不到自定义的数组原型上的方法

bug描述:

自己在数组原型上添加新的方法,h5和app调试下可以使用,征税运行到APP就找不到原型方法

5 回复

我H5 可以 真机调试就不行了


您解决这个问题了吗

其他页面通过 this 进行获取不到挂载在原型链上的全局方法,要通过 getApp().xxx 获取挂载在全局的方法

我也遇到了,请问有解决方案吗

uni-app 中,如果你在 main.js 中为数组原型添加了自定义方法,但在页面或组件中无法访问到这些方法,可能是由于以下几个原因:

1. 确保方法已正确添加到数组原型

首先,确保你在 main.js 中正确地添加了方法到数组原型。例如:

// main.js
Array.prototype.myCustomMethod = function() {
  console.log('This is a custom method');
};

2. 确保 main.js 已正确引入

确保 main.js 已经被正确引入到项目中。uni-app 会自动加载 main.js,但如果你在项目中手动修改了入口文件,确保 main.js 被正确加载。

3. 检查代码执行顺序

确保在页面或组件中使用自定义方法之前,main.js 中的代码已经执行。main.js 是项目的入口文件,通常会在页面或组件加载之前执行。

4. 确保在正确的上下文中使用

在页面或组件中使用自定义方法时,确保你在正确的上下文中调用它。例如:

// 页面或组件中
export default {
  onLoad() {
    const arr = [1, 2, 3];
    arr.myCustomMethod(); // 调用自定义方法
  }
};

5. 检查是否有其他代码覆盖了原型方法

如果你在项目中使用了某些库或插件,它们可能会覆盖或修改数组原型,导致你的自定义方法无法正常工作。检查是否有其他代码影响了数组原型。

6. 使用 Vue.prototype 全局方法

如果你希望在整个应用中更方便地使用自定义方法,可以考虑将其添加到 Vue.prototype 上,而不是直接修改数组原型。例如:

// main.js
import Vue from 'vue';

Vue.prototype.$myCustomMethod = function(arr) {
  console.log('This is a custom method');
};

// 在页面或组件中使用
export default {
  onLoad() {
    const arr = [1, 2, 3];
    this.$myCustomMethod(arr);
  }
};

7. 检查 uni-app 版本

如果你使用的是较旧版本的 uni-app,可能存在一些兼容性问题。尝试更新到最新版本,看看问题是否得到解决。

8. 调试和日志

main.js 中添加一些调试日志,确保代码确实被执行。例如:

// main.js
console.log('main.js loaded');
Array.prototype.myCustomMethod = function() {
  console.log('This is a custom method');
};
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!