背景:我的最新项目不能使用大型图书馆,这让我感到很难过.有几件事情,我想从任何图书馆有,如缺少的功能addClass,hasClass,removeClass,兼容addEventListener,等等.所以我创建了一个小东西,我想一些其他的时间了一些意见,但我有一个设置它的方式有点麻烦.
为了方便使用,我希望一个对象在创建时返回自己的新实例.
鉴于:
$ = function() {
this.name = "levi";
return this;
};
console.log($());
Run Code Online (Sandbox Code Playgroud)
我们得到DOMWindow而不是$因为thisJavaScript 中的古怪性质. 对我来说更奇怪的是,console.log(new $().name)正确地返回"levi".如果this绑定到窗口,为什么对象正确获取值?.我们可以添加新的console.log(new $()),它的工作原理.但是,我不想每次都写新的.所以我尝试过:
$ = function() {
var obj = function() {
this.name = "levi";
};
return new obj();
};
console.log($());
Run Code Online (Sandbox Code Playgroud)
这给了我想要的东西,但是将对象包装在创建它的函数中似乎没有必要.更进一步,返回的对象obj,而不是$.比较测试将失败.
还有什么其他方法可以做到这一点?有更优雅的解决方案吗?我对重新思考整个过程没有任何疑虑.我认为自己非常擅长使用JavaScript,但创建新的JavaScript是我非常新的.
有没有人看到以下解决方案有什么问题?
$a = function() {};
$ = function() {
if (!(this instanceof $)) …Run Code Online (Sandbox Code Playgroud) 我想以下代码:
jQuery("#mybutton").click(function(){
//do something
});
Run Code Online (Sandbox Code Playgroud)
我怎么能记得这个函数"匿名"?,我不能给这个函数命名:
var xfun = function(){
//do something
}
jQuery("#mybutton").click(xfun);
Run Code Online (Sandbox Code Playgroud)
我可以这样做:
var working = false;
jQuery("#mybutton").click(function(){
if (working){
var _this = this;
_this._eventType = e.type;
setTimeout(function() { jQuery(_this).trigger(_this._eventType); }, 200);
return false;
}
//do something
});
Run Code Online (Sandbox Code Playgroud)
我需要的是这样的事情:
var working = false;
jQuery("#mybutton").click(function(){
if (working){
setTimeout( this_function, 200);
return false;
}
//do something
});
Run Code Online (Sandbox Code Playgroud)
谢谢.
编辑:
解:
jQuery("#mybutton").click(function(){
if (working){
var fn = arguments.callee;
var _this = this;
setTimeout(function(){fn.call(_this);}, 200);
return false;
}
//do something
});
Run Code Online (Sandbox Code Playgroud) 我在这个网站上玩,我遇到了随机问题.
所以,基本上,问题是如下.
var random4 = new function() {
var rand = Math.random();
this.test = function(x) {
return rand === x;
}
};
Run Code Online (Sandbox Code Playgroud)
为了让它返回,x应该传递什么价值?random4.testtrue
请注意,此处的代码与链接页面略有不同.这是因为我们无法访问rand变量,我想明确说明这一点.
可能的重复:
JavaScript 函数可以返回自身吗?
考虑以下 javascript 函数:
var x = function(msg) {
alert(msg);
return x;
};
x('Hello')('World!');
Run Code Online (Sandbox Code Playgroud)
这将提醒“你好”和“世界!”。现在我想在不使用 a 的情况下重写该函数,var x例如:
(function(msg)
{
alert(msg);
return this;
})('Hello')('World');
Run Code Online (Sandbox Code Playgroud)
但这不起作用。我究竟做错了什么?如何从函数返回我自己的函数?