0

这个问题是直截了当的。就像在 PHP 中我们有魔术函数一样__construct(),我可以在 javascript 中使用任何相关的函数或 hack 吗?

例子:

function setLength() {
    /* Some work */
}

var a = new Object();
b = new String("Hello");
//Is there anyway the function setLength() will automatically be fired when an Object or String... created?

我期待着你的回答。非常感谢您的帮助。

[X]

4

3 回答 3

2

尝试重载String将是一个坏主意,尤其是在使用第三方库时。同样适用于增广Object

但是,这是您可以这样做的方法,但我不推荐它..

var _String = String;

window.String = function() {
        setLength();
        return new _String(arguments[0]);
}

这显然不会在创建原始字符串时被调用。

js小提琴


您可以使用返回新对象并调用您的函数的字符串工厂函数。String

var stringFactory = function(chars) {
    setLength();
    return new String(chars);  
}

这有一些好处,主要是String构造函数没有重载。

于 2011-12-12T08:19:04.447 回答
1

你可以通过做这样的事情来创建你自己的对象。该函数充当构造函数:

$(document).ready(function(){

    var instance = new object('test123');

    alert('Instance: '+instance.len);

    function object(var1){
        this.var1 = var1;

        this.len = this.var1.length;
    }
});
于 2011-12-12T08:27:38.220 回答
0

您可以覆盖string.prototype.constructor以更改字符串构造函数的默认功能,并object.prototype.constructor更改对象构造函数的默认功能。

但是,覆盖 JavaScript 核心类的默认功能被广泛认为是不好的做法,并且可能有更好的方法来实现您的最终目标。 如果您确实决定这样做,您可能还可以从阅读以下关于使用引用被覆盖函数的函数覆盖函数的 SO 帖子中受益: 在引用原始函数时覆盖 JavaScript 函数

在搞砸了 jsFiddle 之后,然后做了一些研究。我发现我真的错了。字符串原语是不可变的,因此您不能像我建议的那样覆盖构造函数。查看String 原型修改自身,了解更多信息。

于 2011-12-12T08:22:16.863 回答