MAIBILAI

javascript - 为什么 JavaScript 使用原型(prototype)继承来实现?

coder 2024-05-09

有很多文章和帖子解释了 JavaScript 继承的工作原理,但为什么 JavaScript 使用原型(prototype)继承而不是经典继承来实现?

我喜欢 JavaScript,所以我并不是说它是坏事...我只是好奇。

最佳答案

以下是 Brendan Eich 对发生的事情的看法: https://brendaneich.com/2008/04/popularity/

As I've often said, and as others at Netscape can confirm, I was recruited to Netscape with the promise of "doing Scheme" in the browser. At least client engineering management including Tom Paquin, Michael Toy, and Rick Schell, along with some guy named Marc Andreessen, were convinced that Netscape should embed a programming language, in source form, in HTML.

The diktat from upper engineering management was that the language must "look like Java". That ruled out Perl, Python, and Tcl, along with Scheme.

I'm not proud, but I'm happy that I chose Scheme-ish first-class functions and Self-ish (albeit singular) prototypes as the main ingredients. The Java influences, especially y2k Date bugs but also the primitive vs. object distinction (e.g., string vs. String), were unfortunate.

关于javascript - 为什么 JavaScript 使用原型(prototype)继承来实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2090613/

有关javascript - 为什么 JavaScript 使用原型(prototype)继承来实现?的更多相关文章

  1. c# - 在 C# 4.0 中,为什么方法中的输出参数不能协变? - 2

    鉴于这个神奇的界面:publicinterfaceIHat<outTRabbit>{TRabbitTake();}这个类的层次结构:publicclassRabbit{}publicclassWhiteRabbit:Rabbit{}我现在可以编译了:IHat<WhiteRabbit>hat1=null;IHat<Rabbit>hat2=hat1;太棒了。但是,如果我以不同的方式定义接口(interface)会怎样:publicinterfaceIHat<outTRabbit>{boolTake(outTRabbitr);}我表示帽子可能是

  2. c# - 为什么我会收到 ReSharper 错误 "The extracted code has multiple entry points"? - 2

    我正在使用ReSharper重构我的代码。当我尝试将代码块移动到该方法时,我收到以下警告:提取的代码有多个入口点这是我打算使用的方法签名:privatevoidGetRatePlanComponents(ProductPlanproductPlan,ProductRatePlanproductRatePlan)我在网上搜索以了解其含义。但是没有太多运气。有人会解释吗?为了您的引用,这里是我试图移动到一个单独的方法的代码片段:QueryResultproductRatePlanChargeQueryResult=_zuoraService.query(string.Format(@

  3. c# - 为什么 string.Normalize 不一致取决于上下文? - 2

    我有以下代码:stringinput="ç";stringnormalized=input.Normalize(NormalizationForm.FormD);char[]chars=normalized.ToCharArray();我在64位Windows7上使用VisualStudio2010、.net4构建此代码。我在两个上下文中的单元测试项目(平台:任何CPU)中运行它并检查chars的内容:VisualStudio单元测试:字符包含{231}。ReSharper:字符包含{231}。NCrunch:字符包含{99,807}。在msdndocumentatio

  4. c# - 为什么我的 string.indexof(char) 更快? - 2

    不要问我是怎么到那儿的,但我一直在玩弄一些掩码、循环展开等。无论如何,出于兴趣,我在考虑如何实现一个indexof方法,长话短说,所有除了屏蔽等,这个天真的实现:publicstaticunsafeintIndexOf16(strings,intstartIndex,charc){if(startIndex<0||startIndex>=s.Length)thrownewArgumentOutOfRangeException("startIndex");fixed(char*cs=s){for(inti=startIndex;i<s.Length;i+

  5. c# - 为什么 Entity Framework 为 Azure 移动服务表 Controller 生成以下嵌套 SQL - 2

    在将EntityFramework与TableController一起使用时,我正试图弄清EntityFramework问题的根源我创建了以下设置。基本的TodoItem示例提供了一个新的移动WebAPI,它利用了EntityFramework、TableController和默认的EntityDomainManagerpublicclassTodoItemController:TableController<TodoItem>{protectedoverridevoidInitialize(HttpControllerContextcontrollerContext){b

  6. c# - 为什么 WCF/JSON 不为 null 返回值返回 `null`? - 2

    根据JSONspec,表示空值的正确方法是文字null。如果是这样,为什么WCF返回空响应而不是null?这是错误还是在某处记录了此行为?完整的重现示例:usingSystem;usingSystem.ServiceModel;usingSystem.ServiceModel.Web;[ServiceContract()]publicclassService1{[OperationContract(),WebGet(ResponseFormat=WebMessageFormat.Json)]publicstringGetSomeString(){return"SomeStrin

  7. c# - 实现IQueryable包装器来转换结果对象 - 2

    更新2013-08-22:看完“构建IQueryable提供程序系列”(感谢链接!)之后,我走了一些。我相应地更新了代码。它仍然没有完全正常工作。如果我正确理解了本教程,则在请求多个元素的情况下会调用GetEnumerator(例如,通过可查询的ToList()调用或任何聚合函数)。因此,包装程序的所有GetEnumerator实现都需要在提供程序上调用Execute并传递可查询对象的表达式。在其他情况下,如果仅请求单个元素,则直接调用Execute。查询对象的表达式还反射(reflect)了它是用于单个还是多个元素。这样对吗?不幸的是,现在在源查询提供程序上调用Execute时,我收

  8. LINQ 和动态继承的 C# 编译错误 - 2

    考虑以下代码(为了这个测试,它没有做任何特殊用途-它只是为了演示发生的错误)Dictionary<string,dynamic>d=newDictionary<string,dynamic>(){{"a",123},{"b",Guid.NewGuid()},{"c","HelloWorld"}};d.Where(o=>o.Key.Contains("b")).ForEach(i=>Console.WriteLine(i.Value));//retunstheGuidval

  9. c# - 未编译的局部 View 不继承自 ViewImports - 2

    我将View的一部分移动到局部View中。[email protected]@[email protected]@addTagHelper*,Microsoft.AspNetCore.Mvc.TagHelpers应用程序.cshtml@page@modelApplicationModel<partialname="/Pages/Partial/_ApplicationPartial.cshtml"/>_ApplicationPartial.cshtml@mo

  10. c# - 为什么 Linq to Entity Select Method 翻转投影列表属性? - 2

    我对linqtoentity/Json/MVC.net4有最奇怪的行为我有这段代码,出于某种奇怪的原因,所有其他列表的属性顺序都颠倒了。varoutput=db.FooBar.Where(a=>a.lookupFoo==bar).Select(a=>newList<double>{//value'sarethesameperrow//fordemonstrationsake.a.fooBarA,//Always12.34a.fooBarB,//Always12.34a.fooBarC,//Always0a.fooBarD//Always0//lazyca

随机推荐

  1. C# - 将列表转储到下拉列表 - 2

    List<String>nameList=newList<String>();DropDownListddl=newDropDownList();列表在这里填充,然后排序:nameList.Sort();现在我需要将它放到下拉列表中,这是我遇到问题的地方(使用foreach):foreach(stringnameinnameList){ddl.Items.Add(newListItem(nameList[name].ToString()));}没有工作人员-有什么建议吗?它给我编译错误:Error-Thebestoverloadedmethodmatchfor&

  2. c# - IEnumerable 扩展 - 2

    我想制作一个IEnumerable<TSource>可以将自身转换为IEnumerable<SelectListItem>的扩展.到目前为止,我一直在尝试这样做:publicstaticIEnumerable<SelectListItem>ToSelectItemList<TSource,TKey>(thisIEnumerable<TSource>enumerable,Func<TSource,TKey>text,Func<TSource,TKey>value){List<SelectListIt

  3. c# - 静态事件与 C# 中的非静态事件相比如何? - 2

    我刚刚意识到存在静态事件-我很好奇人们如何使用它们。我想知道相对比较如何支持静态方法与实例方法。例如,静态方法基本上是一个全局函数。但我总是将事件与对象的实例联系起来,但我很难在全局层面考虑它们。这里有一些代码可以引用,如果它有助于解释:voidMain(){varc1=newC1();c1.E1+=()=>Console.WriteLine("E1");C1.E2+=()=>Console.WriteLine("E2");c1.F1();}//<<delegate>>+D()publicdelegatevoidD()

  4. c# - 如何删除字符串的定义部分? - 2

    我有这个字符串:“NT-DOM-NV\MTA”如何删除第一部分:“NT-DOM-NV”作为结果:“MTA” 最佳答案 您可以使用此代码:str=str.Substring(10);//toremovethefirst10characters.str=str.Remove(0,10);//toremovethefirst10charactersstr=str.Replace("NT-DOM-NV\\","");//toreplacethespecifictextwithblank//todeletean

  5. c# - 哪个更快 : Union or Concat? - 2

    哪个更快:Union或Concat?我不关心元素的顺序。Enumerable.UnionMethodEnumerable.ConcatMethod 最佳答案 Union删除重复项。Concat没有。因此,如果源包含任何共同项或具有任何内部重复项,它们会产生不同的结果。如果您可以保证没有重复项,或者如果重复项很少并且您不关心在输出中包含它们,Concat会更快,因为不需要根据已经产生的值来测试每个值。但是,如果有很多重复项而您不需要它们,则Union中的额外处理删除重复项可能会被使用结果的代码中的节省所抵消。

  6. c# - 替代if,else if - 2

    我有很多if,elseif语句,我知道必须有更好的方法来做到这一点,但即使在搜索stackoverflow之后,我也不确定在我的特定情况下该怎么做。我正在解析文本文件(账单)并根据某些字符串是否出现在账单上将服务提供商的名称分配给变量(txtv​​ar.Provider)。这是我正在做的事情的一小部分(别笑,我知道这很乱)。总而言之,大约有300个if,elseif。if(txtvar.BillText.IndexOf("SWGAS.COM")>-1){txtvar.Provider="SouthwestGas";}elseif(txtvar.Bi

  7. c# - 匹配所有美国电话号码格式的正则表达式 - 2

    首先我会说我在这里看到了很多例子并用谷歌搜索但没有发现符合我正在寻找一些匹配前3名不低于某些中间值的所有条件。请告诉我如何将它们全部放在一个地方。(xxx)xxxxxxx(xxx)xxxxxxx(xxx)xxx-xxxx(xxx)xxx-xxxxxxxxxxxxxxxxx-xxx-xxxxx用作:conststringMatchPhonePattern=@"\(?\d{3}\)?-?*\d{3}-?*-?\d{4}";Regexrx=newRegex(MatchPhonePattern,RegexOptions.Compiled|RegexOptions.IgnoreC

  8. c# - 将 JSON 数组发布到 mvc Controller - 2

    我正在尝试将JSON数组发布到MVCController。但无论我尝试什么,一切都是0或null。我有一张包含文本框的表格。我需要所有这些文本框的ID和值作为对象。这是我的Javascript:$(document).ready(function(){$('#submitTest').click(function(e){var$form=$('form');vartrans=newArray();varparameters={TransIDs:$("#TransID").val(),ItemIDs:$("#ItemID")

  9. c# - 检查 List<Int32> 值是否连续 - 2

    List<Int32>dansConList=newList<Int32>();dansConList[0]=1;dansConList[1]=2;dansConList[2]=3;List<Int32>dansRandomList=newList<Int32>();dansRandomList[0]=1;dansRandomList[1]=2;dansRandomList[2]=4;我需要一个方法,在评估上述列表时,将返回false对于dansRandomList和true对于dansConList基于事实dansConList在它的值

  10. c# - 将 DateTime.Now 转换为秒 - 2

    我正在尝试编写一个函数,将DateTime.Now实例转换为它代表的秒数,以便我可以将其与另一个DateTime实例进行比较。这是我目前拥有的:publicstaticintconvertDateTimeToSeconds(DateTimedateTimeToConvert){intsecsInAMin=60;intsecsInAnHour=60*secsInAMin;intsecsInADay=24*secsInAnHour;doublesecsInAYear=(int)365.25*secsInADay;inttotalSeconds=(int)(dateTimeToConvert