草庐IT

javascript - 在私有(private)范围内包含 JS 文件

我只是想要包含一个JS文件的能力,但不希望在全局范围内对其进行评估。我浏览了labjs和requirejs,虽然它们可以做1000种其他事情,但似乎都不能解决这个问题。我知道我可以包装foo.js的代码,使其需要特定的上下文,并且可以在其中执行操作,但这不是我想要的(必须修改源文件)。相反,我希望源JS文件保留为任何其他JS文件,不需要任何类型的元数据或通过代码包含的文件本身解析运行时执行上下文;在包含的文件之外,没关系。为清楚起见,一些简单的演示:/**Example1-applytocurrentcontext*/functionx(){include('foo.js');//pr

JavaScript - 这个这个

String.prototype.foo={};String.prototype.foo.bar=function(){//Howcanyoureferencethe"grandparent"string?console.log(this.parent.parent);//obviously,doesn'texist}如“Hello,Nurse!”.foo.bar()将记录“Hello,Nurse!”。如果可以控制foo,会有什么不同吗?编辑:这里定义了foo。Edit2:很好,而不是this.this.this,this.parent.parent。当然parent不存在,但希望现在

javascript - 为什么 "foo".toString() 与 toString.call ("foo"不同)?

下面是一个JavaScript问题://TestedviaGoogleChromeconsole.vartoString=Object.prototype.toString;"foo".toString();//"foo"toString.call("foo");//[objectString][].toString();//""toString.call([]);//[objectArray]{}.toString();//syntaxerrortoString.call({});//[objectObject]为什么toString的结果与toString.call()不同?已更新

Javascript RegExp 非捕获组

我正在编写一组正则表达式来将CSS选择器转换为ID和类数组。例如,我希望'#foo#bar'返回['foo','bar']。我一直在努力实现这一目标"#foo#bar".match(/((?:#)[a-zA-Z0-9\-_]*)/g)但当非捕获前缀?:应忽略#字符时,它会返回['#foo','#bar']。是否有比对每个返回字符串进行切片更好的解决方案? 最佳答案 您可以在循环中使用.replace()或.exec()来构建数组。使用.replace():vararr=[];"#foo#bar".replace(/#([a-zA-Z

javascript - 为什么赋值运算符返回一个值而不是一个引用?

我看到下面关于这个site解释的例子并认为两个答案都是20而不是返回的10。他写道,逗号和赋值都返回一个值,而不是引用。我不太明白那是什么意思。我理解它与将变量传递给函数或方法有关,即原始类型按值传递,对象按引用传递,但我不确定它在这种情况下如何应用。我也了解上下文和“this”的值(在stackoverflow的帮助下)但我认为在这两种情况下我仍然会调用它作为一种方法,foo.bar()这意味着foo是上下文但是似乎两者都会导致函数调用bar()。这是为什么?这意味着什么?varx=10;varfoo={x:20,bar:function(){returnthis.x;}};(foo

javascript - 如何在 ClojureScript 中使用方法和构造函数创建 JS 对象

假设任务是在clojurescript中创建一些实用程序库,以便它可以在JS中使用。例如,假设我想生成等同于:varFoo=function(a,b,c){this.a=a;this.b=b;this.c=c;}Foo.prototype.bar=function(x){returnthis.a+this.b+this.c+x;}varx=newFoo(1,2,3);x.bar(3);//>>9实现它的一种方法是:(deftypeFoo[abc])(set!(.bar(.prototypeFoo))(fn[x](this-asthis(+(.athis)(.bthis)(.cthis)

javascript - 从javascript数组调用函数

我有这个代码:varfoo={x:2,bar:function(){alert(this.x);}};为什么foo.bar()警告2而[foo.bar][0]()警告undefined? 最佳答案 因此,从技术上讲,[foo.bar][0]等同于foo.bar,但在调用函数bar时>失去了与foo对象的“词法绑定(bind)”,因此当您调用它时,JavaScript实际上执行以下操作:foo.bar.call([foo.bar]);一般来说,这个表达式:XXX.yyy(args)被解释为:XXX.yyy.call(XXX,args)

javascript - JavaScript test() 是否在正则表达式中保存状态?

这个问题在这里已经有了答案:WhydoesaRegExpwithglobalflaggivewrongresults?(7个答案)关闭7年前。打开浏览器控制台并执行以下代码:varfoo=/foo/g;然后,foo.test("foo")//true然后,foo.test("foo")//false如果您继续执行foo.test("foo"),您将看到交替出现的true/false响应,就好像varfoo实际上正在被修改一样。有人知道为什么会这样吗?

javascript - 正在使用 var foo = function foo() {};在 IE < 9 中创建内存泄漏的表达式?

我知道这种形式:varfoo=functionbar(){};会将bar名称泄漏到封闭范围并在jscript中创建两个函数。怎么样:varfoo=functionfoo(){};?它仍然将名称泄漏到封闭范围,但无论如何它都在那里(thxtovarfoo)。我知道它将在整个范围内定义,但它会创建两个函数并立即取消引用/销毁其中一个,还是这仍然会导致泄漏?在这种情况下:varbar=function(){foo();varfoo=functionfoo(){};}bar()中是否有两个函数对象?编辑好的,它肯定创建了两个函数对象,现在的问题是:在varfoo行之后,由命名定义创建的函数是否

javascript - Function.prototype.toMethod() 是做什么的?

我注意到Function.prototype在实验性JavaScript中有一个toMethod()方法,但它实际上做了什么?我该如何使用它? 最佳答案 更新:toMethod方法只是实验性的,没有成为标准。home对象现在基本上是静态的,操作super的唯一方法是更改​​[[prototype]]:varbase={…};//asbelowvarobj=Object.setPrototypeOf({foo(){//needstousemethoddefinitionsyntaxsuper.foo();}},base);obj.fo