【问题标题】:Is passing a function just a link? Javascript传递函数只是一个链接吗? Javascript
【发布时间】:2012-01-03 06:08:15
【问题描述】:

使用Javascript时如下:

function Test(Example) {
}

Test.prototype.etc etc etc


function Example() {
}


Example.prototype.etc etc etc


example = new Example();
test = new Test(example);

这是高效还是我以某种方式占用内存?

我问这个是因为我目前在我的 javascript 游戏中有以下设置,并且每个都需要其他一些设置(在括号中):

相机(画布) 输入(画布、相机、瓷砖地图) 精灵(相机、画布)

我是不是走错了路?我应该以其他方式传递此方法吗?这让我感到担忧,因为我现在有很多新的精灵实例,并且想知道它是否会成为一个问题。

干杯

【问题讨论】:

  • javascript 不是一种严格的语言,因此当您执行function Test(Example) { 时,您不会得到function Example() { 的示例,您只是在命名一个参数。你意识到这一点了吗?
  • 重新解释一下,我有一个摄像头,可以计算用户应该看到的各种内容。这被传递给许多不同的“类”(在 Javascripts 案例中需要更好的词吗?) - 它传递给的每个类然后将其分配为 this.camera = camera。然后该类中的函数都可以访问相机正在执行的操作。它工作正常。我只是想知道它是效率低下还是有更好的方法。
  • 哦,如果你的意思是我是否意识到,当我将示例传递给测试时,我没有得到一个新示例,但我得到了相同的示例,那么是的,我做到了。

标签: javascript oop prototype


【解决方案1】:

JavaScript 对象(和函数)在作为参数传递时不会被复制。看看下面的代码(或者在JSFiddle上测试一下):

function Foo() {};
Foo.prototype.property = 5;
function incrementProperty(parameter) { parameter.property++; };

var foo = new Foo();

alert(foo.property); // 5
incrementProperty(foo);
alert(foo.property); // 6
alert(new Foo().property); // 5, because it's a new object

foo 对象在传递给bar 函数时被复制。这可以通过fooproperty 保留是方法之外的值这一事实来证明。简单来说,fooparameter 指向同一个对象。

请记住,它们自己 不是同一个对象。如果您重新分配 parameter 以指向 bar 函数 (parameter = "dummy";) 中的新值,foo 将不受影响。这种区别有意义吗?

注意:JavaScript 字符串和数字在作为参数传递时被复制

【讨论】:

  • 我认为是这种情况,因为上述情况发生在我身上。只是想确定一下。 :)
猜你喜欢
  • 2020-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-11
相关资源
最近更新 更多