javascript - 在其原型(prototype)上定义对象属性的理由是什么?

标签 javascript oop prototype

我一直认为首选替代方案

function MyObject ( ... )
{
    this.MyFunction = function ( ... ) { ... } 
    // ... 
}

function MyObject ( ... )
{
    // ... 
}

MyObject.prototype.MyFunction = function ( ... ) { ... } 

我的理解是,在称为原型(prototype)链的 JavaScript 层次结构的工作方式中,MyObject.prototypeMyObject 的对象得出。用英语来说,这句话的意思是

"Give me a property by giving it to my ancestor who I will then inherit it from."

这似乎是一种非常晦涩且低效的处理方式。来自 C# 背景,我认为这就像拥有一个类

class SpecialString : String 
{

}

并说

Ok, I want SpecialString to have a function SpecialFunction, so I'll go into String and give it public void SpecialString (...). Now SpecialString has it! Mission accomplished.

最佳答案

Ok, I want SpecialString to have a function SpecialFunction, so I'll go into String and give it public void SpecialString (...). Now SpecialString has it! Mission accomplished.

一点也不!使用您的示例,这就像执行以下操作:

function MyObject ( ... )
{
    // ... 
}
Object.prototype.MyFunction = function ( ... ) { ... }

将该方法添加到基本对象中,以便通过扩展您的自定义对象也拥有该方法。

<小时/>

每个构造函数都有自己的prototype对象,可以在其中定义类似类的方法。

原型(prototype)是一种灵活的定义属性或方法的方式,可以在对象的所有实例之间共享,而无需在每次创建新的函数对象时重新声明和创建新的函数对象。实例已创建。

关于javascript - 在其原型(prototype)上定义对象属性的理由是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34345684/

相关文章:

javascript - JS - 从字符串中获取最长的非重复字符子串

javascript - document.getElementById 隐藏文本对于菜单中的书签不可见

javascript - 使用 'reject' 重新创建 underscore.js 'filter'

oop - 工厂设计模式 switch 语句的位置

javascript - foo.prototyp.x = & foo.prototype = {x : } 之间的区别

javascript - 如何在 YUIDoc 中注释对象字面量

java - 这种情况下如何避免instanceof呢?

Javascript OOP 函数打印为字符串

javascript - javascript 是否在原型(prototype)之外存储数据类型信息?

javascript - Prototype vs. Not,有什么好处?