Javascript 向原型添加方法-一次添加一次与一次添加所有方法
两者之间有什么区别吗Javascript 向原型添加方法-一次添加一次与一次添加所有方法,javascript,prototype,Javascript,Prototype,两者之间有什么区别吗 function Person() {}; Person.prototype.eat = function(){}; Person.prototype.speak = function(){}; 及 请注意,该问题仅适用于非继承函数 大多数示例使用第一个选项,如果有多个方法,为什么不使用第二个呢 此外,第二个选项可能会误导人们认为现有原型正在被替换,而在第一个选项中它正在被添加。换句话说,javascript函数是否具有第二个选项可以覆盖的公共原型?第二个选项将原型
function Person() {};
Person.prototype.eat = function(){};
Person.prototype.speak = function(){};
及
请注意,该问题仅适用于非继承函数
大多数示例使用第一个选项,如果有多个方法,为什么不使用第二个呢
此外,第二个选项可能会误导人们认为现有原型正在被替换,而在第一个选项中它正在被添加。换句话说,javascript函数是否具有第二个选项可以覆盖的公共原型?第二个选项将原型中Person类型的对象替换为object类型的对象(泛型对象)-因为您实际上没有继承另一个对象,所以差异很小(如果您正在继承,第二个方法将有效地“否定”继承,因为所有继承的方法都将消失)
事实上,我想到的唯一一件事是,你将失去。换句话说,在第一个示例中,
Person.prototype.constructor===Person
将等于true,而在第二个示例中,它将等于false。存在语义差异;你是否在问是否存在实际差异?性能差异?是否存在e是否存在一种情况而不是另一种情况的边缘情况?“A与B之间是否存在任何差异”不清楚。一种是“A”,另一种是“B”。我编辑了这个问题-添加了令人困惑的内容。特别是,在第二个选项中,您可能会替换现有的原型;这就是我所说的“不同”的意思。第二个选项实际上会替换现有的原型!这就是为什么如果您想从另一个“类”中继承,例如在e> Employee.prototype=Object.create(Person.prototype);尝试使用Employee.prototype={…};
之后将从Person
中删除继承。谢谢。考虑到第二个选项用于“干净”(非继承)函数。函数具有私有原型(\uu prototype),但公共的是空的吗?@Izhaki未修改的函数原型没有任何“自己的”属性,如果这是您所要求的:function C(){}for(C.prototype中的var prop){console.log(prop)}
不打印任何内容。
function Person() {};
Person.prototype = {
eat: function(){},
speak: function(){}
};