javascript - 如何在 JS 中创建全局静态方法

标签 javascript static global

我正在尝试创建一个可以从任何对象调用的全局方法。例如,我想从 myObject.x 调用 random():

function random() {
    this = 22;
}

const myObject = {
    x: 0,
}

Object.prototype.random = random;

myObject.x.random();
console.log(myObject.x);

编辑:
Touffy 的建议非常接近,这里是修改后的版本:

Object.defineProperty(Object.prototype, 'random', {
    value: function() {
        return 22;
    },
    enumerable: false // this is by default, you don't need to write it actually
})

const myObject = {
    x: 0,
}

console.log(myObject.x); // 0
myObject.x.random(); // Updates x to 22
console.log(myObject.x); // Should be 22

最佳答案

这段代码几乎是完美的。问题在于 this = 22。您不能修改 this 值,您需要在 myObject 而不是 myObject.x< 上调用 random 方法.

试试这个:

function random(propertyName) {
    this[propertyName] = 22;
}
    
const myObject = {
    x: 0,
}
    
Object.prototype.random = random;
    
myObject.random('myRandomNumber');
console.log(myObject.myRandomNumber);

我认为这不是很合适的解决方案。你应该使用像 ChanceJS 这样的库(或者您可以编写自己的代码)。在这种情况下,您不需要向对象的原型(prototype)添加 random 函数。

// Load Chance
var Chance = require('chance');

// Instantiate Chance so it can be used
var chance = new Chance();

const myObject = {
    x: 0,
}

myObject.x = chance.integer();

关于javascript - 如何在 JS 中创建全局静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43569634/

相关文章:

java - 有一个不使用实例变量的非静态方法有意义吗?

javascript - 为 webworkers 中的导入脚本指定字符集

javascript - 如何即时重新排序选择列表?

javascript - 如何使用 Cell.js 在 $text 中注入(inject)另一个 html 标签?

c - 指向数组的全局指针

java - 全局变量隐藏在执行的操作中

variables - 在整个包中共享一个全局变量

javascript - 可以跨 iframe 共享 javascript 导入吗?

java - 调用另一个类中的方法

django - django 中无法加载静态文件