Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 类指针对象_Javascript_Pointers_Scope - Fatal编程技术网

Javascript 类指针对象

Javascript 类指针对象,javascript,pointers,scope,Javascript,Pointers,Scope,我试图用类似指针的行为对对象进行编码。它并不像在其他语言中使用的那样是一个真正的指针, 但是我需要一些引用一段数据的东西,这样我就可以传递那个东西,确保它总是引用 同样的数据 考虑以下代码: var Pointer = function (data) { var instance = {}; instance.deref = function () { return data; }; return instance; }; 我现在做的是将数据存储在指针实例的范围内 我的

我试图用类似指针的行为对对象进行编码。它并不像在其他语言中使用的那样是一个真正的指针, 但是我需要一些引用一段数据的东西,这样我就可以传递那个东西,确保它总是引用 同样的数据

考虑以下代码:

var Pointer = function (data) {
    var instance = {};
    instance.deref = function () { return data; };
    return instance;
};
我现在做的是将数据存储在指针实例的范围内

我的问题是: 当我不得不将一堆指针从一个地方移动到另一个地方时,在指针范围内存储数据在速度方面是否有任何明显的缺点?
想象一个数据结构,其中数据由这些指针表示,所有指针在其作用域中都有一段唯一的数据,我必须通过移动指针来操作该结构。

为什么要费劲地将其封装在闭包中每个对象都有类似指针的行为。除非你努力制作一个对象,否则你不会得到对象的深度副本

var x = {}, y;
x.data = "foo";
y = x;
y.data = "bar";  
console.log(x.data) // "bar" because y and x are references to the same object
实际上,区别JavaScript引用和C风格指针的唯一主要行为是缺少指针算法或从整数转换指针。您完全可以在数据结构中随意移动对对象的引用,而无需创建被引用对象的副本


在上面的代码中,如果我们的语言是精确的,那么x和y不是对象,x和y是对对象的引用(非常类似于指针)。当我们将一个空对象指定给x时,x现在指(指向)一个空对象。稍后,我们将y设置为与x引用(指向)同一对象。

为什么要麻烦地将其封装在闭包中每个对象都有类似指针的行为。除非你努力制作一个对象,否则你不会得到对象的深度副本

var x = {}, y;
x.data = "foo";
y = x;
y.data = "bar";  
console.log(x.data) // "bar" because y and x are references to the same object
实际上,区别JavaScript引用和C风格指针的唯一主要行为是缺少指针算法或从整数转换指针。您完全可以在数据结构中随意移动对对象的引用,而无需创建被引用对象的副本


在上面的代码中,如果我们的语言是精确的,那么x和y不是对象,x和y是对对象的引用(非常类似于指针)。当我们将一个空对象指定给x时,x现在指(指向)一个空对象。稍后,我们将y设置为与x指向同一对象。

此外,OP可能想声明一个对象
const
,它正好做到了这一点——保证“它总是引用同一段数据”。我使用了一个闭包,使数据排序类似于指针的私有属性,并控制访问数据的方式。我的例子简化了。我知道诸如
Object.defineProperty()
preventExtensions()
seal()
freeze()
之类的事情,我必须对此进行研究,看看是否有更好的方法。我不需要做指针算术或使用地址,所以我不介意缺少这个。我想我可以进一步简化我的示例,并做你所做的。然后我可能会意识到指针范围内的不是数据本身,而是一个引用。你的例子清楚地说明了这一点,它回答了我的问题。然而,我有很多数据结构我想做,对于我的项目来说,给这样的东西起个名字是有意义的,比如指针(或者其他东西)。这清楚地表明,对象的唯一目的和功能是在其他地方引用一段数据。而不是一个做什么的物体。另外,OP可能想声明一个对象
const
,它正好做到了这一点——保证“它总是引用同一段数据”。我使用了一个闭包,使数据排序类似于指针的私有属性,并控制访问数据的方式。我的例子简化了。我知道诸如
Object.defineProperty()
preventExtensions()
seal()
freeze()
之类的事情,我必须对此进行研究,看看是否有更好的方法。我不需要做指针算术或使用地址,所以我不介意缺少这个。我想我可以进一步简化我的示例,并做你所做的。然后我可能会意识到指针范围内的不是数据本身,而是一个引用。你的例子清楚地说明了这一点,它回答了我的问题。然而,我有很多数据结构我想做,对于我的项目来说,给这样的东西起个名字是有意义的,比如指针(或者其他东西)。这清楚地表明,对象的唯一目的和功能是在其他地方引用一段数据。而不是一个做什么的物体。