问题很简单。就像在PHP中我们有魔术函数__construct()
一样,是否有任何相关函数或黑客我可以在javascript中使用?
示例:
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]
答案 0 :(得分:2)
尝试过载String
会是一个坏主意,尤其是在与第三方库合作时。同样会增加Object
。
但是,你可以这样做,但我不推荐它..
var _String = String;
window.String = function() {
setLength();
return new _String(arguments[0]);
}
在创建原始字符串时,显然不会调用它。
您可以使用字符串工厂函数返回一个新的String
对象并调用您的函数。
var stringFactory = function(chars) {
setLength();
return new String(chars);
}
这有一些优点,主要是String
构造函数没有重载。
答案 1 :(得分:1)
您可以通过执行此类操作来创建自己的对象。该函数充当构造函数:
$(document).ready(function(){
var instance = new object('test123');
alert('Instance: '+instance.len);
function object(var1){
this.var1 = var1;
this.len = this.var1.length;
}
});
答案 2 :(得分:0)
您可以覆盖string.prototype.constructor
以更改字符串构造函数的默认功能,并object.prototype.constructor
来更改对象构造函数的默认功能。 击>
但是,覆盖JavaScript核心类的默认功能被广泛认为是不好的做法,并且可能有更好的方法来实现最终目标。
击>
如果您决定这样做,您也可以阅读以下SO帖子,了解如何使用引用被覆盖函数的函数覆盖函数:Overriding a JavaScript function while referencing the original
搞乱了jsFiddle,然后做了一些研究。我发现我其实是错的。字符串基元是不可变的,因此您不能像我建议的那样覆盖构造函数。查看String prototype modifying itself,了解更多相关信息。