Javascript 当我们可以添加一个属性时,为什么要使用prototype
我有一个javasctipt类Javascript 当我们可以添加一个属性时,为什么要使用prototype,javascript,Javascript,我有一个javasctipt类 function employee(name, jobtitle, born) { this.name = name; this.jobtitle = jobtitle; this.born = born; } var fred = new employee("Fred Flintstone", "Caveman", 1970); employee.prototype.salary = null; fred.salary = 20000;
function employee(name, jobtitle, born)
{
this.name = name;
this.jobtitle = jobtitle;
this.born = born;
}
var fred = new employee("Fred Flintstone", "Caveman", 1970);
employee.prototype.salary = null;
fred.salary = 20000;
fred.notprototype = 1239;
console.log(fred);
现在您可以看到,我使用prototype添加了salary属性,但我只是使用fred.notprototype=1239添加了一个属性代码>不使用原型
当我在对象fred上运行console.log时,我在那里看到了notprototype。那么不添加原型是错误的吗?如果是,那么它有什么区别呢?原型上的属性做两件事:
对于“普通”变量,它们可以提供默认值,当您第一次将同名属性写入对象时,默认值将被隐藏
对于成员函数,它们减少了包含该函数自身副本的对象的每个实例的开销
原型上的属性有两个作用:
对于“普通”变量,它们可以提供默认值,当您第一次将同名属性写入对象时,默认值将被隐藏
对于成员函数,它们减少了包含该函数自身副本的对象的每个实例的开销
比方说,在所有代码之后,您添加了以下内容:
var john = new employee("John Carson", "Philantropist", 2015);
console.log(john);
它将显示john
具有salary
属性(值null
)。这不是你自己设定的,它来自原型链
通过添加到X
的原型,可以更改由new X()
创建的所有对象
另一个例子:
function School(name)
{
this.name = name;
}
School.prototype.getName = function() {
return this.name;
}
var school_one = new School('one');
console.log(school_one.getName()); // prints "one"
在本例中,向原型添加了一个方法getName
。创建school\u one
对象时,它继承自school.prototype
您添加到其中的所有内容(在本例中,仅此方法)
这可用于声明对象的接口(用于访问它的方法)或与构造函数分离的默认值
为了更深入地了解JavaScript及其独特功能,我强烈建议您查看以下视频:;他是一位伟大的演说家,学识渊博,喜欢听他的演讲:)假设,在所有这些代码之后,您添加了以下内容:
var john = new employee("John Carson", "Philantropist", 2015);
console.log(john);
它将显示john
具有salary
属性(值null
)。这不是你自己设定的,它来自原型链
通过添加到X
的原型,可以更改由new X()
创建的所有对象
另一个例子:
function School(name)
{
this.name = name;
}
School.prototype.getName = function() {
return this.name;
}
var school_one = new School('one');
console.log(school_one.getName()); // prints "one"
在本例中,向原型添加了一个方法getName
。创建school\u one
对象时,它继承自school.prototype
您添加到其中的所有内容(在本例中,仅此方法)
这可用于声明对象的接口(用于访问它的方法)或与构造函数分离的默认值
为了更深入地了解JavaScript及其独特功能,我强烈建议您查看以下视频:;他是一位伟大的演说家,学识渊博,喜欢听他的演讲:)嗯,不-当你向原型中添加一些东西时,它会立即在该类型的所有对象中变得可访问。通过添加到X的原型中,你会从那时起更改由new X()创建的所有对象。你能举个例子吗?我有点困惑that@Alnitak啊对,更新了,;在给原型添加相同的属性之前,他添加了.salary
属性,所以我的脑电波变得混乱;-)谢谢@Autolycus我通过展示john
示例强调了这一点;它将有一个.salary
属性,因为您将其添加到了原型中(原型与普通属性不同,它们在JavaScript中有特殊的含义)@Autolycus我已经更新了答案,希望这能让它更清晰一些,否-当您向原型添加某些内容时,该类型的所有对象都会立即访问该对象。通过向X的原型添加内容,您可以从该点开始更改new X()创建的所有对象。你能举个例子吗?我有点困惑that@Alnitak啊对,更新了,;在给原型添加相同的属性之前,他添加了.salary
属性,所以我的脑电波变得混乱;-)谢谢@Autolycus我通过展示john
示例强调了这一点;它将有一个.salary
属性,因为您将它添加到了原型中(原型与普通属性不同,它们在JavaScript中有特殊的含义)@Autolycus我已经更新了答案,希望这能让它更清楚一些