我目前知道在JavaScript中构建单例的两种方法.第一:
var singleton = {
publicVariable: "I'm public",
publicMethod: function() {}
};
Run Code Online (Sandbox Code Playgroud)
它是完美的,除了它没有我可以运行初始化代码的构造函数.
第二:
(function() {
var privateVariable = "I'm private";
var privateFunction = function() {}
return {
publicVariable: "I'm public",
publicMethod: function () {}
}
})();
Run Code Online (Sandbox Code Playgroud)
第一个版本没有私有属性,也没有构造函数,但它更快更简单.第二个版本更复杂,更丑,但有一个构造函数和私有属性.
我不需要私有属性,我只想拥有一个构造函数.有没有我缺少的东西,或者是我唯一拥有的两种方法?
请考虑以下代码:
var f = function() { return 10; }
typeof f; // returns "function"
f(); // returns 10
var g = f;
g(); // returns 10, obviously
var h = new f;
h; // console evaluates to f - ????
h(); // Type error - called_non_callable
typeof h; // returns "object"
Run Code Online (Sandbox Code Playgroud)
那么,这里有什么?Chrome控制台似乎将其评估为f,但它不可调用."新"这样的功能意味着什么?现在如何与f相关?
顺便说一句,这两行看起来是等价的:
var h = new f;
var h = new f();
Run Code Online (Sandbox Code Playgroud)
那是怎么回事?
这个问题更多的是关于支持和向后兼容性.我测试了以下代码.
function newFunc() {}
newFunc.prototype = {
literal : {
init : function() {
console.log(this);
this.test();
},
test : function() {
console.log('test');
}
}
}
var inst = new newFunc();
inst.literal.init();
Run Code Online (Sandbox Code Playgroud)
这是有效的,虽然我没有在任何其他代码中看到对象文字作为原型.是否有一个原因?这似乎是一种合乎逻辑的编码方式,虽然我不想追求它,如果它有严重的陷阱.
我是一个自己学习并且用javascript搞乱的noobie,我偶然发现了那个被称为"正则表达式"的噩梦...我对他们有点了解并且我一直在做着花哨的东西,但我是陷入困境,我希望你向我澄清一下:
我一直在阅读并寻找创造比赛的方法,我匆匆忙忙地回答:
////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ///////////////
var $rows = $('#table tr');
$('#search').keyup(function() {
var val = '^(?=.*\\b' + $.trim($(this).val()).split(/\s+/).join('\\b)(?=.*\\b') + ').*$',
reg = RegExp(val, 'i'),
text;
$rows.show().filter(function() {
text = $(this).text().replace(/\s+/g, ' ');
return !reg.test(text);
}).hide();
Run Code Online (Sandbox Code Playgroud)
});
////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ///////////////
我有点理解那里发生了什么,但是有人可以打破它并"在javascript中翻译它",这样我就能更好地理解这个想法,因为我还在学习javascript,所以我几乎无法用jquery做很酷的事情,我知道确定关于jqueries的事情,但还不足以完全理解他在那里所做的事情以及正则表达式足以知道编写taht代码的人是天才<3
这是我的理解,请纠正我:
var $rows = $('#table tr');
Run Code Online (Sandbox Code Playgroud)
这是范围,"目标"将在哪里寻找比赛
pd:这是我第一次看到'$'来声明变量,而我看到它将它设置为jQuery对象..就是这样吧?
var val = '^(?=.*\\b' + $.trim($(this).val()).split(/\s+/).join('\\b)(?=.*\\b') + ').*$',
reg = RegExp(val, 'i'),
text;
Run Code Online (Sandbox Code Playgroud)
在'$ .trim($(本).VAL()'等于$ .trim($( "#USER_INPUT")VAL()); ......吧?
reg = RegExp(val, 'i')
Run Code Online (Sandbox Code Playgroud)
reg变量用作构造函数来查找不区分大小写的匹配,但不应该是'reg = new RegExp(val,'i')'或者我可以设置它也是如此? …
我想我对 JS 开发还是比较陌生,在对古老的 JS 代码进行一些重构时(证明:那里仍然使用 'with' 语句),我遇到了以下情况:
var result = new {
key: 'value'
// etc...
}
Run Code Online (Sandbox Code Playgroud)
为什么使用new关键字?这和下面有区别吗?
var result = {
key: 'value'
// etc...
}
Run Code Online (Sandbox Code Playgroud) 我正在使用html + jquery和java rest-service后端进行webapp.我有一个带有预先输入建议的文本字段,因此用户在字段中键入的每个字符都将触发服务器往返并更新预先建议列表.
代码的基本部分:
var showTypeaheadSuggestions = function(data) {
// update ui-element ...
}
var displayFailure = function() {
// update ui-element ...
}
var searchText = $("#searchText");
var searchTextKeyup = function() {
var txt = searchText.val();
$.ajax({
url : typeaheadUrl(txt),
type : 'GET',
dataType : 'json',
}).done(showTypeaheadSuggestions).fail(displayFailure);
}
searchText.on('keyup', searchTextKeyup);
Run Code Online (Sandbox Code Playgroud)
它基本上是有效的.但我正在考虑如果你打字会发生什么,例如,2个字母"ab"(这将首先触发"a"的请求,然后是"ab"的请求)...
然后,如果"a"响应需要更长的时间来处理,并在 "ab"响应之后到达,会发生什么?我是否需要在我的代码中检测到这一点,丢掉"a"响应?
在http://api.jquery.com/jquery.ajax/中它确实说:
承诺回调 - .done(),. find(),.byways()和.then() - 按照它们的注册顺序被调用.
这究竟是什么意思? 我希望这意味着$ .ajax()会自动处理上述情况.
但是,当我做一个小测试(在服务器端,我只是注入了2秒睡眠延迟,只有当搜索字符串完全"A"),事实证明它并没有如我所料的行为.
预先输入列表将首先使用"ab"响应进行更新,然后当"a"响应到达时,它也会更新,因此预先输入列表会得到错误的建议.
正确处理此问题的既定方法是什么?
从 Mozilla 文档中,我通过以下链接了解了 new 运算符: https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new
function Car(make, model, year) {
this.make = make;
this.model = model;
this.year = year;
}
const car1 = new Car('Eagle', 'Talon TSi', 1993);
console.log(car1.make);
// expected output: "Eagle"
Run Code Online (Sandbox Code Playgroud)
但我也可以在不使用“this”和“new”运算符的情况下执行此操作:
var Car = (make, model, year) => ({make, model, year})
var car1 = Car('Eagle', 'Talon TSi', 1993)
console.log(car1.make)
Run Code Online (Sandbox Code Playgroud)
如果我可以在不使用“this”和“new”运算符的情况下实现相同的结果,那么首先使用它们的意义何在?或者我错过了什么重要的事情?谢谢。我对菜鸟问题感到抱歉。
在 js 代码中,我见过这样使用:
function doStuff( selector ) {
/* Stuff to do with selector */
}
var q = function( selector ) {
return new doStuff( selector );
}
Run Code Online (Sandbox Code Playgroud)
究竟发生了什么?什么是return new真正在做什么?它似乎将它的参数传递给另一个函数,但是有人可以帮助我完成这个过程吗?
感谢所有和任何帮助,提前致谢。
我是新手,正在使用 javascript 方式。在关闭点。我可以使用new关键字和不使用关键字创建对象new,这让我很奇怪。
这里的代码:-
function RankingManage(rank) {
var rank = rank;
function rankInc() {
rank++;
}
function rankDec() {
rank--;
}
return {
makeInc: function () {
rankInc();
},
makeDec: function () {
rankDec();
},
showRank: function () {
return rank;
}
}
}
var Rank = new RankingManage(80);
var Rank2 = RankingManage(80);
Rank.makeInc();
Rank2.makeInc();
console.log(Rank.showRank());//Output:- 81
console.log(Rank2.showRank());//Output:- 81
Run Code Online (Sandbox Code Playgroud) 例如,我有这个构建Car对象的函数.
function Car() {
var honkCount = 0;
var honkHorn = function () {
honkCount++;
$results.html('HONK!<br />');
};
return {
get honkCount() {
return honkCount;
},
honk: honkHorn
}
}
Run Code Online (Sandbox Code Playgroud)
两者似乎var car = new Car();并var car = Car();没有太大的区别,我有点困惑自己.