Javascript 在对象实例化时将变量名拉入构造函数
下面是一个示例构造函数Javascript 在对象实例化时将变量名拉入构造函数,javascript,oop,Javascript,Oop,下面是一个示例构造函数 function AnObject(a, b){ this.a = a; this.b = b; } 以及它的一个实例 var example = new AnObject('test', 'test'); 假设构造函数有一个属性.name 是否需要构建构造函数,以便将对象的名称设置为实例化时使用的变量的名称 在上述情况下,名称将为example -编辑- 我之所以努力做到这一点,是为了尽可能做到“D.R.Y” 我希望不必: var example =
function AnObject(a, b){
this.a = a;
this.b = b;
}
以及它的一个实例
var example = new AnObject('test', 'test');
假设构造函数有一个属性.name
是否需要构建构造函数,以便将对象的名称设置为实例化时使用的变量的名称
在上述情况下,名称将为example
-编辑-
我之所以努力做到这一点,是为了尽可能做到“D.R.Y”
我希望不必:
var example = new ObjectWithName('example');
是否需要构建构造函数,以便将对象的名称设置为实例化时使用的变量的名称
使用创建新对象时
new AnObject('test', 'test')
这将产生一个对象引用,然后可以直接使用:
(new AnObject("test","test")).a
或丢弃
new AnObject('test', 'test')
或指定给其他对象属性:
myotherobject["b"]=new AnObject('test', 'test')
或被推入阵列中:
myarr.push(new AnObject('test', 'test'))
或者一次分配给多个变量
a=b=c=d=e = new AnObject('test', 'test');
您的构造函数无法知道对象(引用)将以何种方式使用,也无法知道将分配给它的变量的名称(在简单变量分配的情况下)
换句话说,创建对象和使用结果对象引用执行操作是两个完全独立的操作
因此,除非将“name”值作为参数显式传递到构造函数中:
var example = new AnObject('example','test','test')
或者以后再设置
example.name="example"
你不可能做到这一点
是否需要构建构造函数,以便将对象的名称设置为实例化时使用的变量的名称
使用创建新对象时
new AnObject('test', 'test')
这将产生一个对象引用,然后可以直接使用:
(new AnObject("test","test")).a
或丢弃
new AnObject('test', 'test')
或指定给其他对象属性:
myotherobject["b"]=new AnObject('test', 'test')
或被推入阵列中:
myarr.push(new AnObject('test', 'test'))
或者一次分配给多个变量
a=b=c=d=e = new AnObject('test', 'test');
您的构造函数无法知道对象(引用)将以何种方式使用,也无法知道将分配给它的变量的名称(在简单变量分配的情况下)
换句话说,创建对象和使用结果对象引用执行操作是两个完全独立的操作
因此,除非将“name”值作为参数显式传递到构造函数中:
var example = new AnObject('example','test','test')
或者以后再设置
example.name="example"
你不可能做到这一点。不。恐怕那是不可能的 你看,语句
var-example=newanobject('test','test')代码>从右向左求值。因此,首先对新对象('test','test')
进行评估。然后,它返回的值被分配给var-example
由于这种从右到左的求值方式,您的
一个对象
构造函数不可能知道它的返回值将在求值时分配给变量示例
。不。恐怕这是不可能的
你看,语句var-example=newanobject('test','test')代码>从右向左求值。因此,首先对新对象('test','test')
进行评估。然后,它返回的值被分配给var-example
由于这种从右到左的求值方式,你的
一个对象
构造函数不可能知道它的返回值将在求值时分配给变量示例
。哦,现在我读了你的答案,我明白了这个问题@这真的不可能在构造函数上单独完成。哦,现在我读了你的答案,我明白了这个问题@Panomosh这真的不可能在构造函数上单独完成。如果我使用strict
来消除JS提升问题呢?(或var-example;
example=new-AnObject…
)@Panomosh:我不认为这两种方法都会有什么不同,也不会帮助您的构造函数计算出它的返回值将分配给什么。好的,只是想知道这是否是“从右向左”的一种潜在解决方法:)@Panomosh:恐怕这件事真的没有解决办法。是的,我知道这很糟糕:-p如果我使用strict
删除JS提升问题会怎么样?(或var-example;
example=new-AnObject…
)@Panomosh:我不认为这两种方法都会有什么不同,也不会帮助您的构造函数计算出它的返回值将分配给什么。好的,只是想知道这是否是“从右向左”的一种潜在解决方法:)@Panomosh:恐怕这件事真的没有解决办法。是的,我知道这很糟糕