![](/img/trans.png)
[英]Is there a way to create JavaScript objects that behave like C++ RValues?
[英]something like stackbased objects in c++ for javascript
在javascript中尋找一個構造,就像在c ++中的stackbased或local對象中的析構函數一樣,例如
#include <stdio.h>
class M {
public:
int cnt;
M() {cnt=0;}
void inc() {cnt++;}
~M() {printf ("Count is %d\n", cnt);}
};
...
{M m;
...
m.inc ();
...
m.inc ();
} // here the destructor of m will printf "Count is 2");
所以這意味着我正在尋找一個構造,當它的范圍結束時(當它“超出范圍”時)執行一個動作。 它應該是健壯的,因為它不需要在范圍結束時采取特殊操作,就像c ++中的析構函數那樣(用於包裝mutex-alloc和release)。
干杯,毫克
如果保證范圍中的代碼是同步的,則可以創建一個之后調用析構函數的函數。 它可能不那么靈活,語法可能不像C ++那樣整潔,但是:
var M = function() {
console.log("created");
this.c = 0;
};
M.prototype.inc = function() {
console.log("inc");
this.c++;
};
M.prototype.destruct = function() {
console.log("destructed", this.c);
};
var enterScope = function(item, func) {
func(item);
item.destruct();
};
您可以按如下方式使用它:
enterScope(new M, function(m) {
m.inc();
m.inc();
});
這將被記錄:
created
inc
inc
destructed 2
遺憾的是,由於語言設計不強制執行ECMAScript引擎(即javascipt解釋器)來執行您的要求,因此您無法找到所需內容。
當沒有更多對象超出范圍的引用時, 垃圾收集器會(實際上它更像是一種“可能”),但是沒有任何標准化的方式(作為開發人員)可以利用這個。
有一些黑客攻擊(例如將對象的使用包裝在一個dtor
對象本身的函數中,以及一個“用法” - 回調函數)來提供類似於C ++中dtor
的功能,但不是沒有采取任何“額外操作”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.