- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我构建了一个相当有用的函数来识别数据类型;然而,当我愉快地编码时,我被一个相当令人担忧的困境粗鲁地打断了。
如您所知,调用 .bind({foo:'bar'})
后在关闭时,您无法访问所述 foo
“外部”属性(property);然而,在闭包内部,this.foo
有效。
此外,当以这种方式分配某些内容时,您经常会面临抛出:intermediary ... blah blah is undefined
当您尝试访问属性时 - 在定义它之后直接访问。下面的代码解决了这些问题,但是...
问题在代码后面解释:
"use strict";
if ('undefined' == typeof global)
{
Object.defineProperty
(
window,'global',
{
writable:false,
configurable:false,
enumerable:false,
value:window
}
);
}
Object.defineProperty
(
Function.prototype, 'wrap',
{
writable:false,
enumerable:false,
configurable:false,
value:function(jsob)
{
this.bind(jsob);
for (var i in jsob)
{ this[i] = jsob[i]; }
return this;
}
}
);
global.typeOf = function(data)
{
if ((data === null) || (data === undefined))
{ return 'void'; }
if ((data === true) || (data === false))
{ return 'bool'; }
var tpof = (({}).toString.call(data).match(/\s([a-zA-Z]+)/)[1].toLowerCase());
if ((tpof == 'array') || (tpof == 'htmlcollection') || (tpof == 'namednodemap'))
{ return 'list'; }
if ((tpof == 'global') || (tpof == 'window'))
{ return 'glob'; }
switch (tpof.substr(0,6))
{
case 'number': return 'unit';
case 'string': return (/[^\x20-\x7E\t\r\n]/.test(data) ? 'blob' : 'text');
case 'object': return 'jsob';
case 'functi': return 'func';
default: return 'node';
}
}
.wrap
({
list:'void bool unit text blob list jsob func node glob'.split(' '),
init:function()
{
this.list.forEach(function(item)
{
global[(item.toUpperCase())] = item;
global[('is'+(item[0].toUpperCase() + item.substr(1,item.length)))] = function(data)
{
return ((typeOf(data) == this.text) ? true : false);
}
.bind({text:item.toLowerCase()}); // <-- ISSUE
});
return this;
}
}).init();
所以小wrapper
上面解决了这种奇怪的情况;但是,看看 <-- ISSUE
行是;看,我不能使用 wrap()
在那里,我必须使用 bind()
,否则 - 在函数内部 - this
未定义!!
让我澄清一下:如果您按照上面 <script>
中的方式使用整个代码全新 html 文件中的标签;只需更改 ISSUE
线的bind
留言:wrap
;然后尝试类似:isText("bite me!");
您将看到一个错误,指定如下内容:
cannot read property "text" from undefined ..
所以;如果你做 console.log(this)
在该函数定义内;你会看到undefined
.
如果有人可以帮助解决此问题,或者至少解释为什么会发生这种情况,我将非常感谢您的意见。
最佳答案
我认为这个 wrap
函数绝对没有任何用途。事实上,对于这个用例,根本没有理由使用 this
或 bind
。就这么做
global.typeOf = function(data) {
if (data == null) return 'void';
switch (typeof data)
case "boolean": return 'bool';
case "number": return 'unit';
case "string": return /[^\x20-\x7E\t\r\n]/.test(data) ? 'blob' : 'text';
}
switch (Object.prototype.toString.call(data).slice(8, -1).toLowerCase()) {
case "array":
case "htmlcollection":
case "namednodemap": return 'list';
case "global":
case "window": return 'glob';
case "object": return 'jsob';
case "function": return 'func';
default: return 'node';
}
};
global.typeOf.list = 'void bool unit text blob list jsob func node glob'.split(' ');
global.typeOf.list.forEach(function(item) {
global[item.toUpperCase()] = item;
global['is'+item[0].toUpperCase()+item.slice(1)] = function(data) {
return typeOf(data) == item;
}
});
关于JavaScript - 在 (closure).bind() 之后访问属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37128073/
我刚刚开始使用 Google Closure 做一些工作,我想将选择字段的创建移动到它自己的模板中,并使用类似以下内容调用该模板: {call templates.utils.select} {p
我有一些代码,简化后看起来像: fn foo() -> Vec { unsafe { unsafe_iterator().map(|n| wrap_element(n)).co
我正在从脚本内部调用Closure Compiler(closurecompiler.jar)。该脚本还生成Closure Compiler需要编译的一些javascript。有没有办法将此JavaS
以下示例代码生成有关高级优化的编译器警告:“JSC_UNSAFE_NAMESPACE:为命名空间 NS 创建的别名不完整”。如果我删除@enum 注释,它不会发出警告。 var NS = {}; /*
看代码: let add_one = |&: x| { 1 + x }; 我知道x是闭包参数,但是闭包中的&:是什么意思? 最佳答案 这是 Rust 的一个文档不足的部分(并且过时,请参阅评论)。我知
PHP manual for anonymous functions (即闭包)指出: Anonymous functions are currently implemented using the
我从脚本内部调用 Closure Compiler (closurecompiler.jar)。该脚本还生成了一些 Closure Compiler 需要编译的 javascript。有没有办法将这个
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 7年前关闭。 Improve t
当鼠标在文档正文中移动时,我试图调用一个函数。但是,下面的事件处理程序不起作用。 goog.events.listen(document, 'onmousemove', function(e)
我试过了 java -jar compiler.jar --js jj.js --js_output_file jj.js 输出文件大小为 0。 如果我不想从 .min.js 重命名为 .js,我该怎
Google Closure UI库如何与Google DART一起使用? 最佳答案 Dart没有使用JavaScript库的功能。这是设计使然,因为Dart旨在同时针对Dart VM和转换为JS的D
是否可以使用 Google Closure 编译器在两个文件中定义一个类?例如,如果我自动生成一个类并希望为用户输入的代码保留另一个类: 在 MyClass.AutoGenerated.js 中 go
当我在 http://closure-compiler.appspot.com 处的闭包编译器中测试以下代码时: // ==ClosureCompiler== // @output_file_name
是否可以使用 Google Closure 编译器在两个文件中定义一个类?例如,如果我自动生成一个类并希望为用户输入的代码保留另一个类: 在 MyClass.AutoGenerated.js 中 go
当我运行闭包编译器时,会收到一堆这样的警告: [exec] jquery/3.2.1/dist/jquery.js:733: WARNING - Suspicious code. The resul
假设您正在一个具有多个外部库依赖项的 javascript 项目中工作,并且想要在 ADVANCED_OPTIMIZATIONS 模式下使用 Google Closure Compiler 编译您的源
我正在为 PIXI.js 库准备 externs。我收到以下警告: js/Test.js:188: WARNING - Property position never defined on PIXI.
我最近使用 Google 的 Closure 编译器创建了一个 JavaScript 库:https://github.com/bvaughn/task-runner 我打算让这个库供那些也需要完整闭
我正在尝试自学闭包模板。我做了一个简单的文件 simple.soy: {namespace examples.simple} /** * says hello to the world * @pa
我正在将一个项目从 jQuery 迁移到 Closure。我有一些我想编译的只迁移了一半的代码。未编译的源工作正常。我想知道使用 SIMPLE_OPTIMIZATIONS 编译它的编译命令。 原始基于
我是一名优秀的程序员,十分优秀!