Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.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中有指针吗? 我以前使用C++,我意识到指针非常有用。javascript中是否有类似指针的东西?javascript有指针吗?当我想使用以下内容时,我喜欢使用指针: var a = 1; var b = "a"; document.getElementById(/* value pointed by b */).innerHTML="Pointers";_Javascript_Pointers - Fatal编程技术网

javascript中有指针吗? 我以前使用C++,我意识到指针非常有用。javascript中是否有类似指针的东西?javascript有指针吗?当我想使用以下内容时,我喜欢使用指针: var a = 1; var b = "a"; document.getElementById(/* value pointed by b */).innerHTML="Pointers";

javascript中有指针吗? 我以前使用C++,我意识到指针非常有用。javascript中是否有类似指针的东西?javascript有指针吗?当我想使用以下内容时,我喜欢使用指针: var a = 1; var b = "a"; document.getElementById(/* value pointed by b */).innerHTML="Pointers";,javascript,pointers,Javascript,Pointers,我知道这是一个非常简单的例子,我可以使用a,但是有几个更复杂的例子,我会发现指针非常有用。有什么想法吗?没有,JS没有指针 //this will make object1 point to the memory location that object2 is pointing at object1 = object2; //this will make object2 point to the memory location that object1 is pointing at fun

我知道这是一个非常简单的例子,我可以使用
a
,但是有几个更复杂的例子,我会发现指针非常有用。有什么想法吗?

没有,JS没有指针

//this will make object1 point to the memory location that object2 is pointing at
object1 = object2;

//this will make object2 point to the memory location that object1 is pointing at 
function myfunc(object2){}
myfunc(object1);
对象通过传递引用的副本来传递。程序员无法访问表示对象地址的任何类似C的“值”

在函数中,可以通过该引用更改传递对象的内容,但不能修改调用方拥有的引用,因为您的引用只是一个副本:

var foo = {'bar': 1};

function tryToMungeReference(obj) {
    obj = {'bar': 2};  // won't change caller's object
}

function mungeContents(obj) {
    obj.bar = 2;       // changes _contents_ of caller's object
}

tryToMungeReference(foo);
foo.bar === 1;   // true - foo still references original object

mungeContents(foo);
foo.bar === 2;  // true - object referenced by foo has been modified

你打赌JavaScript中有指针;对象是指针

//this will make object1 point to the memory location that object2 is pointing at
object1 = object2;

//this will make object2 point to the memory location that object1 is pointing at 
function myfunc(object2){}
myfunc(object1);
如果不再指向某个内存位置,那里的数据将丢失


与C不同,你看不到指针的实际地址,也看不到指针的实际值,你只能去引用它(从它指向的地址获取值)。

从技术上讲,JS没有指针,但我发现了一种模仿它们行为的方法;)

试试这个:

//可能是指针库
函数可能是指针(v){
这个。val=v;
}
MaybePointer.prototype.valueOf=函数(){返回this.val};
//你的代码
var a=新的可能指针(1);
var b=a;
document.getElementById(b+“”).innerHTML=“指针1”;
var c=新的可能指针(2);
var b=c;
document.getElementById(b+“”).innerHTML=“指针2”

由于JS按值传递对象(如果引用对象完全更改)或按引用传递对象(如果引用对象的字段更改),因此不可能完全替换引用对象

但是,让我们使用可用的方法:替换引用对象的单个字段。通过这样做,以下功能可以实现您的要求:

function replaceReferencedObj(refObj, newObj) {
    let keysR = Object.keys(refObj);
    let keysN = Object.keys(newObj);
    for (let i = 0; i < keysR.length; i++) {
        delete refObj[keysR[i]];
    }
    for (let i = 0; i < keysN.length; i++) {
        refObj[keysN[i]] = newObj[keysN[i]];
    }
}

我刚做了一件奇怪的事,结果也一样

不要传递指针,而是传递一个将其参数填充到目标变量中的函数

var myTarget;

class dial{
  constructor(target){
    this.target = target;
    this.target(99);
  }
}
var myDial = new dial((v)=>{myTarget = v;});

这可能看起来有点邪恶,但效果很好。在这个例子中,我创建了一个通用的拨号盘,它可以以这个小函数的形式分配给任何目标“(v)=>{target=v}”。不知道它在性能方面会有多好,但它的性能很好。

什么是引用的副本,它可以像指针一样使用吗?我该如何使用它?引用是对象的名称,副本基本上是指向同一对象的新名称address@user2297366它只是一个表示对象内容的占位符,与对对象本身的引用相反。我现在明白了。非常感谢。一份“参考资料副本”占用多少内存?它基本上只是一个找到实际对象的地址,还是它实际上在内存中分配了另一个空间来将对象复制到哪个位置?嗯……你通常不需要指针。你能举一个更真实的例子来说明你遇到过的一个情况,指针会对你有帮助吗?可能的重复你只需要返回
汽车的属性就可以了。它与指针或模仿无关,被称为
范围
,从技术上讲,JS只不过是指针。但是,您只能对它们进行解引用,而不能操纵指针本身。var object1只指向object2。如果我们改变object1,object2实际上也会改变。当我们检查object1的内容时,直接更改object2也很好地显示了这一点。它将显示object1也已更改,因为它指向内存中的相同数据。我已经测试过了。我不理解第二部分,但这并不重要。Javascript在将对象传递给函数方面有点滑稽。如果函数一次更改一个对象的一个成员,则它将通过引用传递。但是,如果您尝试使用大括号完全更改对象,则它似乎是按值传递的。我猜这是因为当你做={…}时,Javascript会自动认为你在创建一个新对象,基本上是创建一个与参数同名的局部变量。实际上,这并不是像你明确说的那样创建一个新对象。我学到了始终传递引用:当您执行objX={..}时,实际上是将引用传递给新创建的对象。当执行objX=objY时,将引用传递给已经存在的objY对象。但是=实际上总是传递赋值运算符右侧的对象所在的地址(不管它是新创建的还是已经存在的,赋值运算符右侧首先解析)。说得好!经过一些测试,我学到了更多,它实际上总是按引用传递的,只是小心不要更改它的地址。@user3015682不,JavaScript是按值传递的,不是按引用传递的。JavaScript实际上有“指针”,指针只是存储对象地址的变量。它们是按值传递的。因此,可以修改指向的对象,但不能通过将对象传递给函数来强制对象指向其他对象。
var myTarget;

class dial{
  constructor(target){
    this.target = target;
    this.target(99);
  }
}
var myDial = new dial((v)=>{myTarget = v;});