将 new Class() 和函数链接到 JavaScript 中的同一个变量?
Chain new Class() and function to the same variable in JavaScript?
通过创建 someClass() 的新实例并将函数链接到同一个变量,每次调用 someFunc() 时都会创建一个新的 someClass 吗?
const someFunc = new someClass().getOrSetOrWhatever()
与我通常写的相比
let s = new someClass()
s.getOrSetOrWhatever()
如果我将第一个示例放入构造函数中,是否意味着只有一个实例(每次我调用 this.someFunc)?这会是不好的做法吗?提前致谢!
如果你这样写:
const someFunc = new someClass().getOrSetOrWhatever;
比 someFunc 将引用(指针)到 someClass 的那个实例的方法(函数),如果你调用:
const someFunc = new someClass().getOrSetOrWhatever;
someFunc();
...
someFunc();
等同于:
let s = new someClass()
s.getOrSetOrWhatever()
..
s.getOrSetOrWhatever()
不会,不会每次都创建一个新的实例,因为代码"new someClass()"不会被再次调用
您已经声明了一个名为 "someFunc" 的变量。
您的代码的右侧将被评估,以便为 "someFunc"
赋值
当您阅读右侧代码时,它会首先创建一个新实例。如果右侧没有更多代码,它会简单地将新实例存储到变量中。
但是,由于您随后调用了一个名为 "getOrSetWhatever" 的方法,"getOrSetWhatever" 的结果将存储到您的变量中。
您的实例现在只是漂浮在内存中的某个地方,并没有存储到任何变量中。
您已经创建了一个实例,调用了一个方法(存储在该实例上或存储在 class 的原型对象上),并将该方法的结果存储到您的变量中。
someFunc
这里只是一个变量。
new someClass()
如果你把 someFunc
写成
每次都会被调用
const someFunc = () => new someClass().getOrSetWhatever()
每次调用 new someClass()
时都会创建一个新的 someClass 实例。 "new" 关键字导致 class 的唯一 "copy" 生成新的唯一副本(实例)。
当您执行链接到 new someClass()
的 getOrSetOrWhatever()
时:
let s = new someClass().getOrSetOrWhatever()
然后 "s" 变量将包含 getOrSetOrWhatever 的结果(无论那个函数 returns)。
HOWEVER,new someClass()
生成的实例将存在,但不可访问,因为它从未分配给变量(潜在的内存泄漏)——只返回 getOrSetOrWhatever 的结果。
链接将左侧 generated/returned 的内容传递到右侧。
foo().bar()
// is like:
// foo() --> bar()
// or
// the method "bar" is within "foo"
当你不链接时:
let s = new someClass();
let foo = s.getOrSetOrWhatever();
然后实例被分配给s
变量,foo
被分配给任何"getOrSetOrWhatever"returns。
通过创建 someClass() 的新实例并将函数链接到同一个变量,每次调用 someFunc() 时都会创建一个新的 someClass 吗?
const someFunc = new someClass().getOrSetOrWhatever()
与我通常写的相比
let s = new someClass()
s.getOrSetOrWhatever()
如果我将第一个示例放入构造函数中,是否意味着只有一个实例(每次我调用 this.someFunc)?这会是不好的做法吗?提前致谢!
如果你这样写:
const someFunc = new someClass().getOrSetOrWhatever;
比 someFunc 将引用(指针)到 someClass 的那个实例的方法(函数),如果你调用:
const someFunc = new someClass().getOrSetOrWhatever;
someFunc();
...
someFunc();
等同于:
let s = new someClass()
s.getOrSetOrWhatever()
..
s.getOrSetOrWhatever()
不会,不会每次都创建一个新的实例,因为代码"new someClass()"不会被再次调用
您已经声明了一个名为 "someFunc" 的变量。
您的代码的右侧将被评估,以便为 "someFunc"
赋值当您阅读右侧代码时,它会首先创建一个新实例。如果右侧没有更多代码,它会简单地将新实例存储到变量中。
但是,由于您随后调用了一个名为 "getOrSetWhatever" 的方法,"getOrSetWhatever" 的结果将存储到您的变量中。
您的实例现在只是漂浮在内存中的某个地方,并没有存储到任何变量中。
您已经创建了一个实例,调用了一个方法(存储在该实例上或存储在 class 的原型对象上),并将该方法的结果存储到您的变量中。
someFunc
这里只是一个变量。
new someClass()
如果你把 someFunc
写成
const someFunc = () => new someClass().getOrSetWhatever()
每次调用 new someClass()
时都会创建一个新的 someClass 实例。 "new" 关键字导致 class 的唯一 "copy" 生成新的唯一副本(实例)。
当您执行链接到 new someClass()
的 getOrSetOrWhatever()
时:
let s = new someClass().getOrSetOrWhatever()
然后 "s" 变量将包含 getOrSetOrWhatever 的结果(无论那个函数 returns)。
HOWEVER,new someClass()
生成的实例将存在,但不可访问,因为它从未分配给变量(潜在的内存泄漏)——只返回 getOrSetOrWhatever 的结果。
链接将左侧 generated/returned 的内容传递到右侧。
foo().bar()
// is like:
// foo() --> bar()
// or
// the method "bar" is within "foo"
当你不链接时:
let s = new someClass();
let foo = s.getOrSetOrWhatever();
然后实例被分配给s
变量,foo
被分配给任何"getOrSetOrWhatever"returns。