我想知道jQuery对象如何在Chrome中的Developer Tools的控制台日志中显示为一个数组.
例如,如果我执行$('<a>'),我在控制台日志中看到的是:
[<a>?</a>?]
Run Code Online (Sandbox Code Playgroud)
但以下陈述是错误的:
var a = $("<a>");
Array.isArray(a); // false
a instanceof Array; // false
Run Code Online (Sandbox Code Playgroud)
我试图修改jQuery并看看会发生什么,令人惊讶的是,length从jQuery函数中删除会删除数组表示法:
length: 0, // commenting this line removes array notation
Run Code Online (Sandbox Code Playgroud)
相反,它会显示为(箭头是要展开的实体):
> jQuery.jQuery.fn.jQuery.init
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试创建我自己的构造函数,它应该以数组表示法显示,它不起作用:
var test = function() { this.length = 0 };
new test();
// Logged (arrow is same one as before):
// > test
Run Code Online (Sandbox Code Playgroud)
所以我想知道jQuery代码中的什么使Developer Tools将实例显示为数组.在jQuery中添加了什么属性/函数/东西,使得Developer Tools在显示实例时将其作为数组处理?
我目前正在开发.NET 4 Client Profile的应用程序,因为这是通过Windows Update在大多数家用计算机上出现的版本.
但是,我无法添加引用,System.Web.dll因为它在此版本中不存在 - 我该怎么办?
将System.Web.dll与我的应用程序一起部署是一个好主意,还是不行?我真的需要HTTP连接和所有,所以我不能修改我的应用程序作为一种解决方法.将我的应用程序定位到.NET 4(没有客户端配置文件)可能是一种可能性,还是仅仅在仅具有客户端配置文件的计算机上工作?
如果我有这样的功能:
function foo(_this) {
console.log(_this);
}
function bar() {}
bar.prototype.func = function() {
foo(this);
}
var test = new bar();
test.func();
Run Code Online (Sandbox Code Playgroud)
然后记录的test实例bar.
然而,对于这个工作,我需要传递this的bar.prototype.func功能.我想知道是否可以在不通过的情况下获得相同的this值.this
我尝试使用arguments.callee.caller,但这会返回原型函数本身,而不是原型函数中的this值.
是否可以通过仅调用原型函数来记录test实例?barfoo()
我在Chrome中遇到了AJAX问题,出现以下错误:
Uncaught Error: NETWORK_ERR: XMLHttpRequest Exception 101
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
function IO(filename) {
if (window.XMLHttpRequest) { // Mozilla, Safari,...
xmlhttp = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) { }
}
}
xmlhttp.open("GET", filename+"?random="+Math.floor(Math.random()*100000001), false);
xmlhttp.send();
if(xmlhttp.readyState==4)
return xmlhttp.responseXML;
}
Run Code Online (Sandbox Code Playgroud) 我通常在我的项目中以这种方式创建我的类...对象文字.
var objectName = {
//global variables
a : 'somevalue',
func1: function(){
},
func2: function(){
}
}
Run Code Online (Sandbox Code Playgroud)
如果我必须将其转换为原型格式,我该怎么做?
当使用这种格式完成工作时,使用原型比使用原型更有利.
为什么人们在原型上讲得那么多.
我试图检测我的扩展程序是否已卸载.
我无法使用,chrome.management.onUninstalled因为它会在其他扩展名上被触发.
我的工作,包括网页套接字和服务器(Node.js的)和客户端(浏览器)之间的数据使用自定义的数据交换(很简单)格式我设置了发送的项目.
我正在发送3位数据,因为我发送的项目都有8种可能性.数据格式如下所示:
0 1
bit index 01234567 8901...
item aaabbbcc cddd...
Run Code Online (Sandbox Code Playgroud)
目前,我正在解析字节中的项目,如下所示:
var itemA = bytes[0] >> 5;
var itemB = (bytes[0] >> 2) & 7;
var itemC = (bytes[0] & 3) << 1 | bytes[1] >> 7;
var itemD = (bytes[1] >> 4) & 7;
Run Code Online (Sandbox Code Playgroud)
就个人而言,这感觉太复杂了.问题是,这只是复杂的,因为我得到以字节为单位,这是8的倍数解析出的3位项目的数据我有位移,做与运算,因为8是不被3整除我有时甚至必须将两个字节的部分组合起来itemC.
将这些数据作为3位组而不是8位组读取会更有效.
我想出的是将所有字节到比特串用.toString(2),然后用.substring得到长度为3子串,并转换回了一些parseInt(bitString, 2),但我想这是不这样做的方式,因为字符串操作很慢,我实际上没有做任何与字符串相关的事情.
是否可以读取例如3的组中的位而不是从字节中解析它们?或者是否有更有效的方法来读取字节外的位?
我正试图在每个人的pocket现状中提供功能.我想_.extend通过每个人的口袋这样做,即everyone.now.由于某些我无法理解的原因,_.extend无法在客户端正确提供功能.
这是我目前的代码:
var _ = require("underscore"),
everyone = require("nowjs").initialize(app);
everyone.now.foo = function() {};
_.extend(everyone.now, {
bar: function() {}
});
console.log(everyone.now.foo); // [Function]
console.log(everyone.now.bar); // undefined
Run Code Online (Sandbox Code Playgroud)
在服务器端和客户端,我都可以做得now.foo()很好.另一方面,now.bar()失败因为now.bar没有定义.客户端和服务器端都是这种情况.我试图在服务器端检查是否存在,如上一行所示.但是,此行记录undefined.
Underscore的extend功能(显然)对其他对象起作用,所以我猜它与现在使用的"魔术命名空间"有关.
如何扩展不起作用,everyone.now我怎样才能使它工作?
编辑2:我在代理中挖掘了更多.看起来像通过传递变量在代理上设置属性,因为它的名称不起作用.我删除了我的第一个编辑,因为这个测试用例更加狭窄.
为什么这不起作用?这是一个错误吗?(大多数时候我自己问这个问题我知道不是,但这真的让我无能为力......)
var proxy = Proxy.create({
get: function(pr, name) {
console.log("get called");
return null;
},
set: function(pr, name, value) {
console.log("set called");
}
});
var key = "foo";
proxy["foo"] = "bar"; …Run Code Online (Sandbox Code Playgroud) javascript node.js underscore.js nowjs-sockets ecmascript-harmony
根据MSDN我可以通过Uint32Array3种方式创建:
new Uint32Array( length );new Uint32Array( array );new Uint32Array( buffer, byteOffset, length );第一种和第二种方法效果很好,但第三种方法对我不起作用.这段代码有什么问题?
var buffer = new ArrayBuffer(8);
var uint32s = new Uint32Array(buffer, 4, 4);
uint32s[0] = 0x05050505;
var uint8s = new Uint8Array(buffer);
for (var i =0; i< 8; i++)
{
alert(uint8s[i]);
}
Run Code Online (Sandbox Code Playgroud)
这当然很好,但当然byteOffset = 0.
var uint32s = new Uint32Array(buffer);
Run Code Online (Sandbox Code Playgroud) 我正在构建一个旨在用于iPad的webapp(保存的书签,视口标签等).webapp每隔2分钟向一个不安全的服务器(例如,没有可以超时的会话cookie)发出AJAX请求(使用jQuery),返回JSON.
但是,30分钟后,请求停止进入服务器,我想停止从iPad发送.我查看了jQuery的错误回调的参数,显示textStatus == "Error"和errorThrown == "".是的,没什么errorThrown,这也是我为什么神秘化的部分原因.
我尝试在30分钟后执行用户启动的AJAX调用,返回相同的错误.如果不清楚,javascript仍然在运行:它只是失败的AJAX调用.此外,除了iPad之外,这种行为不会发生在任何地方.
任何想法为什么会发生这种情况,或者如何解决它?