Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 向原型添加方法-一次添加一次与一次添加所有方法_Javascript_Prototype - Fatal编程技术网

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(){}
};