这个/ classname的Javascript成员访问器

时间:2014-03-10 18:22:01

标签: javascript constructor

这两种结构有什么区别?

function ObjectName()
{
    this.member1 = "foo"; // #1
    ObjectName.member2 = "baz"; #2
}

只是两种方式说同样的事情,或者第二种方式宣布的成员有不同的属性?它对继承的对象有不同的作用吗?

2 个答案:

答案 0 :(得分:1)

它做了两件不同的事情。

this.member1 = "foo":

使用new

调用时,在创建的对象实例上设置member1属性
new ObjectName().member1 === 'foo';

在函数上设置属性仅设置在函数对象

ObjectName.member2 = 'baz';
ObjectName.member2 === 'baz';
myObjInstance.member2 === undefined

那是因为function关键字确实设置了一个变量,它是:

的简写
var ObjectName = function() {

作为一个对象,你可以设置你想要的任何属性,但它只能在那个对象上。

答案 1 :(得分:1)

我同意@Matt,但简而言之,我会说第一个(member1)是一个实例属性,第二个(member2)是一个静态属性,如果你熟悉OOP。