当前位置: 首页 > 面试题库 >

定义Javascript原型

萧焱
2023-03-14
问题内容

以下两个JavaScript原型之间的功能区别是什么?选择一个与另一个原型有什么好处?

选项1:

Person.prototype.sayName = function(name) {
   alert(name);
}

选项2:

Person.prototype = {
   sayName: function(name) {
      alert(name);
   }
}

我是否假设 选项2 导致废弃某些隐式绑定到原型的函数是否正确?


问题答案:

我是否假设选项2导致废弃某些隐式绑定到原型的函数是否正确?

对,就是这样。尽管唯一隐式绑定的属性是constructor您很少需要的属性。

功能上有什么区别?

选项1只是扩展现有的原型。如果已经有Person从原型对象继承的实例,则它们也将能够使用该sayName方法。使用选项2,新的原型仅用于覆盖后实例化的对象。

选择其中一个有什么好处吗?

这些现在应该是不言自明的。选项1(扩展)被认为更干净,如果要修改外部/未知/本地原型,则必须这样做。尽量避免选择2。

如果您仍然更喜欢对象文字语法,则应考虑使用Object.assign扩展现有原型:

Object.assign(Person.prototype, {
   sayName: function(name) {
      alert(name);
   }
});

您可能需要填充工具Object.assign预ES6环境。或者,$.extend也可以_.extend工作。当然,您最喜欢的库也为此提供了一个辅助函数。



 类似资料:
  • 问题内容: 注意:根据 ECMAScript5.1,第15.1.1.3节,window.undefined是只读的。 现代浏览器正确地实现了这一点。 例如:Safari 5.1,Firefox 7,Chrome 20等。 Undefined仍可在以下位置更改:Chrome 14,… 原来,问题的原因是 如果“对象”中没有属性“ x”,则返回false。 我通过在两个Facebook函数中用规则相等

  • 我正在使用Scala 2.11.8并尝试添加protobuf。 这是我的日志: [信息]协议目标目录:/home/user/Git/tortle/target/src\u managed/main [信息]协议目标目录:/home/user/Git/tortle/target/src\u managed/main [...] [错误]/home/user/Git/tortle/target/src

  • 本文向大家介绍JavaScript中定义对象原型的两种使用方法,包括了JavaScript中定义对象原型的两种使用方法的使用技巧和注意事项,需要的朋友参考一下 第一种: 第二种: 个人比较喜欢第二种;第二种可以的原型中可以拓展各种方法,用起来比较顺手。 例如可以写: 以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持呐喊教程!

  • 是否可以为基元类型定义招摇定义/模型?例如,考虑以下几点 但是,上面的示例返回了许多错误(例如,swagger需要一个字段)并且没有示例使用任何不是。 目的是将其用作另一个模型的子组件和参数——以某种方式重用已经定义的组件。 把这想象成一个昂首阔步的typedef 编辑:根据规范,定义对象与模式对象相同http://swagger.io/specification/#schemaObject,表示

  • 导航器的 oscpu 属性在 XP IE7 和 WIN7 IE9 计算机上抛出未定义。其他属性(如等)工作正常。 我想知道Javascript如何识别windows版本(windows Xp、7或8) 有人能帮忙吗? 编辑: 得到答案 返回这样的东西… 4.0(兼容;MSIE 7.0; MSBrowserIE7; Windows NT 5.1;. NET CLR 1.0.3705;. NET CL

  • 我试图创建一个自定义的原型,它定义了一个实质性的pom.xml并包含几个源文件。 在使用这个原型生成项目时,没有包含我在archetype.xml中定义的任何源(pom.xml按预期生成)。 batfile.bat位于src/main/resources/archetype-resources/src/main/resources中。 我还有一个原型-metadata.xml位于src/main/