我正在从Head First Javascript(Morrison)学习Javascript。
在一个示例中,作者通过执行以下操作,将变量“signature”声明为名为Blog的类的类属性:
Blog.prototype.signature = "by Blogger-Name";
上述之间是否存在差异,并将其声明为如下所示?
Blog.signature = "by Blogger-Name";
答案 0 :(得分:3)
使用Blog
时,.prototype
的所有实例都会签名。所以当你实例化var blog = new Blog
时。它将有一个signature property
。
如果您只是使用Blog.signature = x
那么当您使用new
创建对象时,它就不会出现。
答案 1 :(得分:1)
设置构造函数的static
成员的属性会使属性从所有实例中可见(在读取时)。
这可以用来模拟C ++类的function Widget(x0, y0, x1, y1, name) {
this.x0 = x0;
this.y0 = y0;
this.x1 = x1;
this.y1 = y1;
this.name = name;
this.all_instances.push(this);
}
Widget.prototype.all_instances = [];
var w1 = new Widget(10, 20, 30, 40, "First");
var w2 = new Widget(10, 20, 30, 40, "Second");
成员,并且通常用Javascript表单方法完成(因为方法实际上只是常规数据成员,与C ++不同)。
一个例子,可以用来代替"数据"保留某个"类的所有实例"在容器中:
push
请注意,但是当写入这样的"静态"您正在创建的属性,而不是实例属性; .all_instances
有效,因为它没有写入public void update(String url) {
try {
player.stop();
player.reset();
player.setDataSource(url);
player.prepare();
player.play();
} catch (IOException exc) {
exc.printStackTrace();
}
}
,而是修改其内容(数组)。