在一个未知的主机环境中,以ES5严格模式处理全局对象的build议方法是什么? ECMAScript不提供一个内置的方式来引用我知道的全局对象。 如果是这样,这是我正在寻找的答案。 在已知的环境中 ,全局对象通常具有自引用属性。 由于全局对象是全局范围的VO ,因此全局对象的属性是全局variables,所以我们可以使用它们从任何地方获取全局对象的句柄: 在networking浏览器中,我们可以使用window或self 。 在node.js中,我们可以使用global 。 但是,在所有主机环境中并不一定如此。 据我所知,Windows Script Host不提供任何方法来访问全局对象。 在WSH中获取全局对象的推荐方法似乎是在不parsing对象的上下文中使用this关键字。 例如: var GLOBAL = (function(){return this}()); 这种技术将适用于任何主机环境,但不能用于严格模式,因为未定义的方式不会在严格模式下引用全局对象: 如果在严格模式代码中评估这个值,那么这个值不会被强制转换为对象。 null或undefined的这个值不会被转换为全局对象,并且原始值不会被转换为包装器对象。 通过函数调用传递的值(包括使用Function.prototype.apply和Function.prototype.call调用的函数)不会强制将此值传递给对象(10.4.3,11.1.1,15.3.4.3,15.3。 4.4)。 正如所料,以下代码导致undefined : (function(){ "use strict"; var GLOBAL = (function(){return this}()); console.log(GLOBAL); }()); 那么, 在任何环境下,无论严格模式如何处理全局对象,正确的方法是什么? 顺便说一句,我目前的方法是嗅探引用全局对象的全局variables,如下所示: var self, window, global = global || window || self; …然后只是使用global 。 我认为这是一个不好的解决办法,其中大部分是相当明显的,并没有解决WSH问题。
属性document.body.clientHeight和document.body.clientWidth在IE7,IE8和Firefox上返回不同的值: IE 8: document.body.clientHeight : 704 document.body.clientWidth : 1148 IE 7: document.body.clientHeight : 704 document.body.clientWidth : 1132 火狐: document.body.clientHeight : 620 document.body.clientWidth : 1152 为什么这种差异存在? 是否有不同的浏览器(IE8,IE7,火狐)不使用jQuery的一致性?
我在我的Rails 3项目中有这个Javascript视图: 应用程序/视图/费用/ new_daily.js.erb var i = parseInt($('#daily').attr('data-num')) + 1; //$('#daily').append('agrego fila ' + i + ' <br />'); $('#daily').append('<%= escape_javascript(render(partial: 'new_expense', locals: { i: i })) %>'); $('#daily').attr('data-num', i); 我想通过我的'我'JavaScriptvariables通过本地ruby部分,我怎么能做到这一点?
在JavaScript中,您可以使用其原型对象来扩展现有的类: String.prototype.getFirstLetter = function() { return this[0]; }; 是否有可能使用这种方法来扩展DOM元素?
我正在开发一个使用window.showModalDialog的GreaseMonkey脚本。 但在完成之前,我发现Firefox 29警告说: 不build议使用window.showModalDialog()。 使用window.open()来代替。 更多帮助https://developer.mozilla.org/en-US/docs/Web/API/Window.open 但问题是, window.open需要UniversalBrowserWrite特权,以打开一个模式窗口使用window.open 。 那么,为什么不推荐使用window.showModalDialog ? 有什么API不需要特权? 注 :我不想要一个假的模式对话框(如jQuery的),我需要一个真正的模式,暂停JavaScript的执行。
最近我发现自己使用jQuery和JavaScript很多,经常做我以前使用CSS做的事情。 例如,我使用JavaScript / jQueryreplace表格行颜色或创buildbutton并链接hover效果。 这可以接受吗? 还是应该继续使用CSS来处理这些事情? 所以真正的问题是:当我使用太多的jQuery? 当我越过线时我怎么能理解?
当使用JSON.stringify()时,json2.js似乎忽略父对象的成员。 例: require('./json2.js'); function WorldObject(type) { this.position = 4; } function Actor(val) { this.someVal = 50; } Actor.prototype = new WorldObject(); var a = new Actor(2); console.log(a.position); console.log(JSON.stringify(a)); 输出是: 4 {"someVal":50} 我期望这个输出: 4 {"position":0, "someVal":50}
你可以请给我最好的方式来检测所有浏览器的jQuery的窗口closures事件 ? 我的意思是单击浏览器上的Xbutton或window.close(),而不是F5,表单提交,window.location或链接。 我正在寻找很multithreading,但还没有find正确的方法。 非常感谢您的支持。
我有一个问题,找出如何用'和'replacestring中的最后一个',': 有这个string:test1,test2,test3 我想结束:test1,test2和test3 我正在尝试这样的事情: var dialog = 'test1, test2, test3'; dialog = dialog.replace(new RegExp(', /g').lastIndex, ' and '); 但它不工作
我已经实现了这个脚本上传与AJAX文件,它在除了资源pipe理器以外的其他浏览器完美的工作,我注意到,formData不支持IE9和更less,是否有任何替代formData在IE中,我想用干净的JavaScript function doObjUploadExplorer(url, lnk_id, file, progress, success, content, frm, div_dlg, start_func){ var file_input = null, frm_data = new FormData(), req; try { //firefox, chrome, safari etc req = new XMLHttpRequest(); } catch (e) { // Internet Explorer Browsers req = new ActiveXObject("Microsoft.XMLHTTP"); } if (document.getElementById(file)) { file_input = document.getElementById(file); for (var i = 0; i […]