我有这个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;
fred.notprototype = 1239;
console.log(fred);
现在您可以看到我使用原型添加了salary属性,但之后我只使用fred.notprototype = 1239;
添加了一个属性,而没有使用原型。
当我在对象fred上执行console.log时,我看到那里没有原型。那么添加原型是不对的吗?如果是,那么它有什么区别?
答案 0 :(得分:3)
让我们说,在所有代码之后添加:
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_one
对象后,它会从School.prototype
继承您添加到它的所有内容(在这种情况下只是一个方法)。
这可用于声明对象的接口(用于访问它的方法)或默认值与构造函数分开。
为了更深入地了解JavaScript及其独特功能,我强烈建议您查看Douglas Crockford中的一些视频;他是一个伟大的演讲者,知识渊博,喜欢听他说:)
答案 1 :(得分:1)
原型上的属性做了两件事:
对于“普通”变量,它们可以提供默认值,当您第一次将具有相同名称的属性写入对象时,该值将被隐藏
对于成员函数,它们减少了包含其自己的该函数副本的对象的每个实例的开销。