将变量名称拉到对象实例化的构造函数

时间:2017-03-29 10:55:28

标签: 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 = new ObjectWithName('example');

2 个答案:

答案 0 :(得分:1)

  无论如何

是否构建构造函数以便将对象的名称设置为它实例化的变量的名称?

使用

创建新对象时
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"

你无法实现这一目标。

答案 1 :(得分:1)

没有。我担心这是不可能的!

您看,语句var example = new AnObject('test', 'test');从右到左进行评估。因此,首先评估new AnObject('test', 'test')。然后,它返回的值将分配给var example

由于此次从右到左的评估,无法您的AnObject构造函数可以知道当其返回值将被分配给变量example时它正在接受评估。