我正在尝试使用自调用函数,以便每个函数都objects将返回不同的消息.
<script type="text/javascript">
objects = {};
for( var i = 0; i < 10; i++ ) {
objects['function'+i] = function () {
var text = ( function() { return "I am object " + i; } )();
return text;
};
}
for( var j = 0; j < 10; j++ ) {
document.write( objects['function'+j]() + "<br>" );
}
</script>
Run Code Online (Sandbox Code Playgroud)
到目前为止,上述结果如下:
我是对象10
我是对象10
我是对象10
我是对象10
我是对象10
我是对象10
我是对象10
我是对象10
我是对象10
我是对象10
如何使用自调用函数立即设置消息而不是与不稳定的事情联系在一起i?
在javascript中的以下自定义类中,在回调中,为什么this.obj什么都没有,但局部变量obj有我想要的东西?谢谢.
function ClassTest(director) {
this.obj = {"test1": "test1"};
}
function test1(input, callback) {
callback("success");
}
ClassTest.prototype.test = function() {
var obj = this.obj;
test1("niuniu",function(e){
console.log(this.obj); // undefined
console.log(obj); // this one has stuff
});
}
// run
new ClassTest().test()
Run Code Online (Sandbox Code Playgroud) function makeIncreaseByFunction(increaseByAmount) {
return function (numberToIncrease) {
return numberToIncrease + increaseByAmount;
};
}
makeIncreaseByFunction(3)(10);
Run Code Online (Sandbox Code Playgroud)
为Clarity更新了 有人可以解释为什么(3)(10)的写法是这样的吗?我知道10是作为内部函数的参数提供的,但为什么语法上会这样注明?如果我们有三个嵌套函数,那么参数总是按照(3)(10)(20)中的顺序写出来吗?
关于javascript范围的jquery网站的在线文档我有问题.有代码;
(function() {
var baz = 1;
var bim = function() {
console.log( baz );
};
bar = function() {
console.log( baz );
};
})();
Run Code Online (Sandbox Code Playgroud)
并说:
console.log( baz ); // baz is not defined outside of the function
Run Code Online (Sandbox Code Playgroud)
我不明白的是,即使baz已定义,为什么console.log(baz)未定义.因为我认为范围是一样的.我错过了什么?
我的问题是ExtJS 4中GridPanel中列的渲染器功能.渲染器的记录应该从我的商店加载我的列表元素,它确实如此; 但它总是加载列表中的相同元素.
以下是我的代码的相关摘要.
首先是我的商店:
var nStore = Ext.create('Ext.data.Store', {
storeId: 'people',
fields: ['team', 'name', 'liste', 'sums'],
data: [{
team: 'TestTeam', name: 'TestPerson',
liste: ['F', 'F', 'F', 'S', 'N', 'F', 'S',
'S', 'S', 'F', 'F', 'F', 'S', 'A', 'N',
'S', 'S', 'S', 'S', '', '', 'N', 'N',
'N', 'S', 'S', 'N', 'S', 'F', 'N', 'N'],
sums: [[7, 4, 0, 0, 0, 0, 0], [3, 0, 0, 0, 0]]
}]
});
Run Code Online (Sandbox Code Playgroud)
然后是渲染器所在的列数组:
var counter = 0;
for (var i = 0; …Run Code Online (Sandbox Code Playgroud) 我正在编写一个Mixin来处理用户在视图/组件外部点击的时间.
这是混合:
App.ClickElsewhereMixin = Ember.Mixin.create({
onClickElsewhere: Ember.K,
didRender: function() {
this._super.apply(this, arguments);
return $(document).on('click', this.get('onClickElsewhere'));
},
willDestroyElement: function() {
this._super.apply(this, arguments);
$(document).off('click', this.get('onClickElsewhere'));
},
});
Run Code Online (Sandbox Code Playgroud)
我在我的组件中使用它:
onClickElsewhere: function() {
this.send('exitEditMode');
},
Run Code Online (Sandbox Code Playgroud)
但是当我运行它时,我得到:
TypeError: this.send is not a function
Run Code Online (Sandbox Code Playgroud)
我怎样才能保持this背景?
只是为了让读者更容易,在这里工作的Mixin:
App.ClickElsewhereMixin = Ember.Mixin.create({
onClickElsewhere: Ember.K,
setupListener: Ember.on('didRender', function() {
// Set an event that will be fired when user clicks outside of the component/view
return $(document).on('click', $.proxy(this.get('onClickElsewhere'), this));
}),
removeListener: Ember.on('willDestroyElement', function() {
// Clean the previously …Run Code Online (Sandbox Code Playgroud) 在我正在进行的项目中,我不得不将对象克隆到变量中.
我第一次尝试 - 似乎是最明显的解决方案 - var obj2 = obj1然而我很快意识到这使得obj2 引用 obj1,所以每当我在obj2中设置属性时,属性也会在obj1中更新.好吧,我不能那样.所以,我开始寻找在JavaScript中克隆对象的方法 - 我发现了多个解决方案,主要是
var obj2 = JSON.parse(JSON.stringify(obj1))- 但这并没有保留我为我的对象定义的所有getter和setter!
对我来说现在最明显的解决方案似乎首先使用上面的JSON技巧使obj2具有所有obj1的属性,然后循环遍历所有对象getter和setter并使用它们添加它们Object.defineProperty(),但我还没有找到一种方法来获取一个对象的所有getter/setter.
我有一个图标,需要将它所在的密码字段放入文本字段,反之亦然.
<i class="password_icon fa fa-unlock" aria-hidden="true" onmouseover="mouseOverPassword()" onmouseout="mouseOutPassword()"></i>
Run Code Online (Sandbox Code Playgroud)
但当我将鼠标悬停在图标上时,它表示:
Uncaught ReferenceError: mouseOutPassword is not defined
at HTMLElement.onmouseout ((index):1)
Run Code Online (Sandbox Code Playgroud)
即使它们在我包含的.js文件中:
function mouseOverPassword() {
var obj = $("#passworldField");
obj.type = "text";
}
function mouseOutPassword() {
var obj = $("#passworldField");
obj.type = "password";
}'
Run Code Online (Sandbox Code Playgroud)
这些函数位于$(document).ready函数中.我无法真正找出它为什么不起作用.是的,.js包含在页面上.
我读到每个函数都有自己的堆栈,这意味着当函数结束时,它的变量不再保留在内存中.我还读到对象是通过引用返回的.
考虑这个例子:
function getObject() {
var obj = {name: "someName"};
return obj;
} //At the end the locals should disappear
var newObj = getObject();// Get reference to something that is no longer kept in the stack,
console.log(newObj);//Run Code Online (Sandbox Code Playgroud)
因此,如果函数返回的值是对 不再存在的对象的引用(在堆栈中),我们如何仍然获得正确的值?在C(语言)中返回指向局部变量的指针是疯狂的.
有没有办法在"onreadystatechange"方法中获取请求的URL?
我想运行多个XHR请求并知道它们中的哪一个回来:
xhr.open("GET", "https://" + url[i], true);
xhr.onreadystatechange = function(url) {
console.log("Recieved data from " + url);
};
xhr.send();
Run Code Online (Sandbox Code Playgroud)