假设我创建一个对象如下:
var myObject = {
"ircEvent": "PRIVMSG",
"method": "newURI",
"regex": "^http://.*"
};
Run Code Online (Sandbox Code Playgroud)
什么是去除财产的最好方式regex与新落得myObject如下?
var myObject = {
"ircEvent": "PRIVMSG",
"method": "newURI"
};
Run Code Online (Sandbox Code Playgroud) 垃圾收集如何在JavaScript中运行?它与.NET垃圾收集类似吗?是因为在VBScript中实现垃圾收集很糟糕,以至于人们避开垃圾收集并建立了对JavaScript作为标准客户端语言的偏好?
在C++中,我可以显式定义构造函数和析构函数,然后在构造函数/析构函数中使用cout <<"C或D Called"来确切知道在哪里.
但是在JavaScript中如何知道对象何时被破坏.以下示例是关注我的案例.
我在超时时调用内部函数,我想知道只要定时器正在运行,对象就会保持活动状态,等待再次调用next.
用户点击呼叫控制
// Calls Control
Run Code Online (Sandbox Code Playgroud)
控制呼叫消息
var message_object = new Message( response_element );
Run Code Online (Sandbox Code Playgroud)
消息调用效果
new Effects().fade( this.element, 'down', 4000 );
message_object.display( 'empty' );
Run Code Online (Sandbox Code Playgroud)
效果
/**
*Effects - build out as needed
* element - holds the element to fade
* direction - determines which way to fade the element
* max_time - length of the fade
*/
var Effects = function( )
{
this.fade = function( element, direction, max_time )
{
element.elapsed = 0;
clearTimeout( element.timeout_id …Run Code Online (Sandbox Code Playgroud) 在一个非专业术语中,垃圾收集机制如何工作?
如何识别对象是否可用于垃圾回收?
另外,Reference Counting, Mark and Sweep, Copying, TrainGC算法的意思是什么?
来自C++,每当我打电话给new我的电话时,我都会感到难以理解delete.在JavaScript中,我发现自己new偶尔在我的代码中调用,但是(希望)浏览器中的垃圾收集功能将为我处理混乱.
我不喜欢这个 - delete在JavaScript中有一个方法,我是如何使用它与C++不同的?
谢谢.
我在Phaser中摧毁精灵时遇到了麻烦.
我有一个JavaScript对象,我们称之为Block.Block有一个sprite属性,设置如下:
this.sprite = this.game.add.sprite(this.x, this.y, 'blocks', this.color);
Run Code Online (Sandbox Code Playgroud)
在我的代码中的某个点,Block由两个不同的数组引用:
square[0] = Block;
destroy[0] = Block;
Run Code Online (Sandbox Code Playgroud)
在某个Update()循环中,我需要销毁精灵,所以我使用以下代码:
square[0].sprite.destroy(true); //Destroy the sprite.
square[0] = null; //Remove the reference.
Run Code Online (Sandbox Code Playgroud)
在下一个Update()循环中,当我查看destroy [0]时,我希望看到:
destroy[0].sprite: null
Run Code Online (Sandbox Code Playgroud)
然而,我所看到的是:
destroy[0].sprite: b.Sprite
Run Code Online (Sandbox Code Playgroud)
属性只是默认并设置为false.我担心的是,如果我现在将destroy [0]设置为null,那个sprite对象会发生什么?
它会浮动还是自动清理?我应该先以某种方式破坏Block对象吗?另外,如果destroy()没有使引用为空,那么它与kill()有什么不同?
任何有关此事的想法将不胜感激.
如果我有这样的功能
function do(callback) {
//do stuff
callback();
}
Run Code Online (Sandbox Code Playgroud)
然后我传入一个匿名函数:
do(function() { //do something else });
Run Code Online (Sandbox Code Playgroud)
在页面的生命周期内,是否收集过匿名函数?如果没有,我如何让它可用于GC?
我必须这样做吗?
var h = function() { //do something };
do(h);
delete h;
Run Code Online (Sandbox Code Playgroud)
我甚至不用担心这个吗?我正在构建一个具有较长生命周期的Web应用程序,使得许多ajax调用保持对象一段时间并且实际上并不需要页面刷新来导航.所以我想弄清楚我是否会陷入内存泄漏怪物.
我刚读了这个问题和接受的答案: 什么是JavaScript垃圾收集?
在答案中,Noldorin引用了Apple的一些指导原则.这是我关注的部分:
使用删除语句.每当使用新语句创建对象时,请将其与delete语句配对.这可确保与对象关联的所有内存(包括其属性名称)都可用于垃圾回收.
我总是花时间跟上最佳实践的速度,特别是如果我可以减少脚本的内存占用.所以我开始测试一些东西.如果我理解正确,以下是在调用方法后删除自身的对象的示例.
var thing = function () {
var a_method, and_another;
a_method = function() { /* do stuff */ };
and_another = function() { /* do some other stuff*/ };
this.init = function() { a_method(); and_another(); };
};
delete new thing().init();
Run Code Online (Sandbox Code Playgroud)
通常我会将所有内容都包装在一个自调用函数中,并像上面一样传入我的全局变量.一切都和我通常做的一样,唯一的区别是我在delete之前添加了权利new.
代码以任何一种方式工作.
所以问题是:我在这做什么吗?删除对仅存在于函数范围内的对象的引用是否有某种好处?或者我只是让事情看起来令人困惑?
我正在构建大型网站,使用大量的javascript,我的所有内容都被加载ajax,它与facebook非常相似,而且由于有很多不同的页面,我需要大量的javascript,所以我想到的是划分我的脚本在各个部分中,每个页面都有自己的脚本文件.
现在加载很简单,我只是为每个页面加载一个新文件,但我担心如果用户通过100个不同的页面加载100个不同的脚本文件会发生什么?
目前我的网站没有那么多页面,但我很确定它将来会在某个时候发展到近100个独特的页面.
那么用较慢的计算机的用户会发生什么?我猜它会开始放慢很多,因为没有刷新.根据我的阅读,不可能以任何简单的方式从加载的脚本文件中卸载所有事件和数据,如果我尝试这样做可能会花费我很多时间和精力来做到这一点.
所以我的问题是,我应该保留它的方式还是尝试做点什么呢?我目前正在使用jquery几个插件,如果我不得不猜测平均文件将是大约50-200行代码,主要是click事件和ajax调用.
请注意,每个页面对象都有它自己的前缀为每个类,例如:home_header,login_header
所以onClick事件监听器和类似的东西之间不应该有任何冲突.
编辑我在这个问题上设置了赏金,我希望听到更多的意见.
我目前正在重新思考qooxdoo JavaScript框架的对象处理处理.
看看下图(A目前在范围内):
假设我们要删除B.通常,我们会删除所有对象之间的所有引用.这意味着我们在示例中切断了连接1到5.这真的有必要吗?
至于我已经阅读这里,浏览器使用的标记-清除算法.在这种情况下,我们只需要切割参考1(与范围的连接)和5(与DOM的连接),这可能会更快.
但我可以确定所有浏览器都使用标记和扫描算法或类似的东西吗?
javascript ×9
html5 ×1
jquery ×1
memory ×1
memory-leaks ×1
object ×1
qooxdoo ×1
sprite ×1
vbscript ×1