首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Crockford Prototypical Inheritance ......没有原型链?没有超级?

在云计算领域中,Crockford Prototypical Inheritance(CPI)是一种面向对象编程(OOP)的继承模式。它是由JavaScript创始人Douglas Crockford提出的,用于实现对象之间的继承关系。CPI不使用传统的原型链(prototype chain)和超级(super)的概念,而是采用一种更简单、更直观的方式来实现继承。

CPI的核心思想是,每个对象都有一个名为“prototype”的属性,该属性指向它的原型对象。当我们试图访问一个对象的属性时,如果该对象本身没有这个属性,那么它会查找其原型对象。如果原型对象也没有这个属性,那么它会继续查找其原型对象,直到找到该属性或者到达原型链的末端。

CPI的优势在于它简化了原型链的概念,使得对象继承变得更加直观和易于理解。它避免了在原型链中出现循环引用等问题,同时也提高了性能。

CPI在云计算领域中的应用场景包括:

  1. 开发前端应用:CPI可以用于构建面向对象的JavaScript应用,提高代码的可读性和可维护性。
  2. 开发后端应用:CPI可以用于构建基于Node.js的后端应用,实现服务器端的OOP编程。
  3. 开发云原生应用:CPI可以用于构建基于Kubernetes的云原生应用,实现微服务架构下的OOP编程。

推荐的腾讯云相关产品:

  1. 腾讯云云服务器:提供高性能的虚拟化云服务器,支持Node.js等多种编程语言。
  2. 腾讯云容器服务:提供基于Kubernetes的容器服务,支持构建云原生应用。
  3. 腾讯云数据库:提供多种类型的数据库服务,支持MySQL、MongoDB等多种数据库。

产品介绍链接地址:

  1. 腾讯云云服务器:https://cloud.tencent.com/product/cvm
  2. 腾讯云容器服务:https://cloud.tencent.com/product/tke
  3. 腾讯云数据库:https://cloud.tencent.com/product/cdb
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Javascript之其实我觉得原型没有难的那么夸张!

就是这样的,实例的隐式原型和构造函数的原型是相等的,指向同一个指针的! 九、原型   上一小节,我们初步的看到了原型与隐式原型间的关系,实际上,这就是原型的初步形成。...是的,到这里实际上,Object.prototype就没有隐式原型了,因为到顶了。   ok,到这里我们原型第一阶段的问题已经解决了,下面我们开始第二阶段的问题。   ...本文参考及借鉴: 最详尽的 JS 原型原型终极详解,没有「可能是」——Yi罐可乐 深入理解javascript原型和闭包(完结)《原型部分》——王福朋 ECMAScript® 2018 Language...如果不是,为什么可以使用原型上的方法比如1..toString()(没写错,1..toString())呢?实际上,通过字面量创建的值类型并不能完全的称之为“对象”。因为它没有属性和行为,也不唯一。...但是它却可以使用原型上的方法,究其原因,是因为在js运行时给值类型做了一层包装,使其可以使用原型上的方法。而并不是因为值类型本身就是对象。

74130

Javascript之其实我觉得原型没有难的那么夸张!

就是这样的,实例的隐式原型和构造函数的原型是相等的,指向同一个指针的! 九、原型   上一小节,我们初步的看到了原型与隐式原型间的关系,实际上,这就是原型的初步形成。...是的,到这里实际上,Object.prototype就没有隐式原型了,因为到顶了。   ok,到这里我们原型第一阶段的问题已经解决了,下面我们开始第二阶段的问题。   ...__proto__) 要注意的是,只是“设置”了某个指定的对象的原型,而不是更改了整个原型,很好理解吧。其实说是改变了原型也行,因为若是上游的原型变了,下游的原型自然也就变了。   ...本文参考及借鉴: 最详尽的 JS 原型原型终极详解,没有「可能是」——Yi罐可乐 深入理解javascript原型和闭包(完结)《原型部分》——王福朋 ECMAScript® 2018 Language...如果不是,为什么可以使用原型上的方法比如1..toString()(没写错,1..toString())呢?实际上,通过字面量创建的值类型并不能完全的称之为“对象”。因为它没有属性和行为,也不唯一。

65020
  • 全面理解面向对象的 JavaScript

    而在原型式面向对象语言中,除内建对象 (build-in object) 外,不允许全局对象、方法或者属性的存在,也没有静态概念。所有语言元素 (primitive) 必须依赖对象存在。...ECMAScript 规定,当要给某个对象的属性赋值时,解释器会查找该对象原型中第一个含有该属性的对象(注:原型本身就是一个对象,那么原型即为一组对象的。...对象的 原型中的第一个对象是该对象本身)进行赋值。反之,如果要获取某个对象属性的值,解释器自然是返回该对象原型中首先具有该属性的对象属性值。图 1说名了这中隐藏机制: 图 1....原型中的属性隐藏机制 ?...理解了原型,那么将非常容易理解 JS 中基于原型的继承实现原理,程序清单 5 是利用原型实现继承的简单例子。 清单 5.

    1.1K100

    Prototypal Inheritance with Javascript-JavaScript中的原型继承(基础概念篇)

    因为上篇文章Prototypal Inheritance没有对一些基本概念作出阐述,所以加入这篇文章作为补充。...所有的继承最终都是通过原型来实现的。 在JavaScript中只是模拟了传统的继承。 ---- What is prototypal inheritance? 什么是原型继承?...沿该链条(也叫原型)一直向上走的话,最终我们可以找到root Object。此时,我们不能继续向前了,因为我们到达了原型的顶端。 让我们以对象o开始。...如果在原型中找不到,它会查找原型原型。它会沿着原型查找每个对象的原型,直到找到指定的property/method,或者 到达原型的顶端。...---- How do you implement prototypal inheritance? 你是如何实现原型继承的?

    44220

    Javascript Prototypes之旅(A Plain English Guide to JavaScript Prototypes译文)

    Prototype chains(prototype inheritance原型/原型继承   Javascript的每个对象均有一个原型(prototype)。...当消息(请求某个属性的指令)到达某个对象时,Javascript会尝试在该对象上寻找该属性,但没有的时候就会将消息转发到该对象的原型并在原型上寻找该属性,就是这样不断向上层原型转发消息,直到在某个原型中找到该属性或消息转发到顶层原型...(译者语:每个对象的原型均指向另一个对象,最顶层的原型就是Object类的实例) ? 原型继承可以无限延长。但一般情况下过长的原型会令人困惑且难以维护。...Prototype chains(prototype inheritance原型/原型继承讲述那样,消息是在原型传递并在原型中寻找该属性,所以为原型增删改了属性能即时反映出来) ? 5....(译者语:我们甚至可以通过object.create(null)开创建一个没有原型的对象;而使用其他方式创建的对象它的原型中至少有一个Object类实例) 当然在创建对象的时候,还可以设置该对象的属性

    66690

    实现 JavaScript 继承的三种模式设计

    也即是说, 在 Java 中, 继承是通过让一个类继承于其他的类, 然后创建这个类的实例对象来实现的, 但是在 JavaScript 中, 并没有类的概念, 继承是通过原型继承即让一个对象直接继承于另一个对象来实现的...注:本文为译文, 翻自: http://davidshariff.com/blog/javascript-inheritance-patterns/ 伪类继承 伪类继承模式的目的是在 JavaScript...david.sayPlanet(); // David was born on Mars jane.sayPlanet(); // Jane was born on Earth 函数式继承 这个模式是由 Douglas Crockford...david.sayPlanet(); // David was born on Mars jane.sayPlanet(); // Jane was born on Earth 我们可以看到, 在这个模式里面, 我们不需要操作原型...不管你选择哪种方式都应该取决于你的实际情况, 还是那句话, "没有银弹", 所以你只需要根据你的实际情况作出最合适的方案选择就可以.

    31320

    类继承和原型继承有什么区别?

    JavaScript 所支持的面向对象编程包括原型继承(prototypal inheritance)。...类继承和原型继承有什么区别? 类继承(Class Inheritance):实例(instances)由类继承而来(类和实例的关系,可以类比为建筑图纸和实际建筑 ?...原型继承(Prototypal Inheritance):实例/对象直接从其它对象继承而来,创建实例的话,往往用工厂函数(factory functions)或者Object.create()方法。...原型:提到了衔接继承(concatenative inheritance)、原型委托( prototype delegation)、函数继承(functional inheritance),以及对象组合...原型继承可以分为下面几类: 委托(delegation,也就是原型) 组合(concatenative,比如混用(mixins)、Object.assign()) 函数式(functional,这个函数式原型继承不是函数式编程

    1.1K60

    深入理解javascript中的继承机制(1)原型继承机制将共有的属性放进原型

    这就可以理解为,new出来的对象继承拥有了了它的构造函数的原型对象,这就隐约有一点继承的概念了。 原型继承机制 原型的概念就是多个这样的对象通过proto相互关系起来 ?...下面我们就通过一个实例来说明,原型继承机制的实现与原理 我们有三个构造函数,Shape,2DShape, Triangle。...; 这样我们就实现了原型的继承关系。...下面我们对以上原型关系进行测试 ? Paste_Image.png 上图我们可以看到清晰的一个原型关系。 ?...Paste_Image.png 将部分共享属性移到原型里去之后,原型的继承关系如图,对比之前简洁了一些,因为没有多余的重复属性 ?

    53720

    《JavaScript 模式》读书笔记(6)— 代码复用模式1

    在以后的程序中,当使用new Child()语句创建一个对象时,它会通过原型从Parent()实例中获取它的功能,如下所示: var kid = new Child(); kid.say(); 追溯原型...所有这一切都在后台发生,并不用为这种复杂的原型而烦恼,重要的是需要理解它的工作原理以及所需要访问或可能修改的数据位于何处。...请注意,这里仅使用__proto__来解释原型,即使在一些环境中提供了该属性,在程序开发语言中也并不能使用该属性。...对象#3中并没有这样的say()方法,因此它将通过原型查询到#2.然而,#2中也没有该方法,因此它又顺着原型查询到对象#1,而对象#1正好具有say()方法。...最后,让我们更进一步查看原型的概念,比如说,我们有以下这样的代码: var kid = new Child(); kid.name = 'Patrick' kid.say();   下图显示了上述这种情况下原型的工作过程

    41930

    动图学 JavaScript 之:原型继承

    我们并没有显式地声明它们,那么究竟它们从哪里来的呢?可不要说什么“那是 JS 中的魔法!”。其实这些都因为一个叫做 原型继承(prototypal inheritance) 的东西。...这样每当我们访问实例的属性时,引擎首先检查该属性在实例上是否定义,如果没有找到,就会通过 __proto__ 属性,顺着原型 继续查找。 ? 不止是一层 这只是一个步骤,其实可以包含多个步骤!...原型的终点 现在,你可以想象,原型不会永远持续下去。最终会有一个原型等于 null 的对象:它就是 Object.prototype。...如果我们试图访问在本地或者原型上都不存在的属性,最终会返回 undefined。 ?...全文就到这里啦,希望对你学习原型继承有帮助~ 参考链接 JavaScript Visualized: Prototypal Inheritance ---- 本文首发于公众号:码力全开(codingonfire

    55920

    《JavaScript 模式》读书笔记(6)— 代码复用模式1

    在以后的程序中,当使用new Child()语句创建一个对象时,它会通过原型从Parent()实例中获取它的功能,如下所示: var kid = new Child(); kid.say(); 追溯原型...所有这一切都在后台发生,并不用为这种复杂的原型而烦恼,重要的是需要理解它的工作原理以及所需要访问或可能修改的数据位于何处。...请注意,这里仅使用__proto__来解释原型,即使在一些环境中提供了该属性,在程序开发语言中也并不能使用该属性。...对象#3中并没有这样的say()方法,因此它将通过原型查询到#2.然而,#2中也没有该方法,因此它又顺着原型查询到对象#1,而对象#1正好具有say()方法。...最后,让我们更进一步查看原型的概念,比如说,我们有以下这样的代码: var kid = new Child(); kid.name = 'Patrick' kid.say();   下图显示了上述这种情况下原型的工作过程

    26360

    如何正确学习JavaScript(写给非JavaScript程序员和编程新手)

    另外,也许有人会建议从尊敬的JavaScript教父Douglas Crockford写的《JavaScript语言精粹》开始学习JavaScript。...然而,虽然Crockford先生对JavaScript无所不知,被誉为JavaScript世界的爱因斯坦,但他的《JavaScript语言精粹》并不适合初学者学习。...这本书没有通透、清晰、明了的阐述JavaScript的核心概念。但对于更高级的学习路线,我倒会建议你看看Crockford先生的视频。...你至少要知道原型模式(Prototype Pattern),工厂模式(Factory Pattern)和原型继承(Prototypal Inheritance),其它的不作要求。...就像在你之前成千上万的程序员一样,你打败了最难的bug,你没有退步,你没有放手,你没有找任何借口让自己放弃。

    1.5K70

    深圳大学梁臻老师课题组提出基于原型特征表示和配对学习的迁移学习框架及其在情绪识别中的应用

    PR-PL通过原型特征表示(Prototypical Representations)对EEG数据进行表征,并将基于EEG的情绪识别任务建模为配对学习任务(Pairwise Learning)。...该论文已发表在IEEE Transactions on Affective Computing,题目为《PR-PL: A Novel Prototypical Representation Based...同时,样本分类学习算法对精准类别标签的依赖强,在没有类别标签或者类别标签出现一定噪声的时候其鲁棒性会下降。...总的来说,PR-PL的框架主要组成部分如下:(1)利用原型特征学习(Prototypical Learning)配合DANN网络寻找普适,共享,信噪比高的情绪原型特征。...同时,如图3所示,与其他模型设置(完全没有进行配对学习,以及没有对目标域进行配对学习)相比,所提出的PR-PL促成了类内更为聚集而类间更为分散的情绪聚类。

    56240

    What is super() in JavaScript?

    class inheritance....,"Hui") child.loveMom() 上述代码中,我们定义了父类 Family ,子类 Child,并让子类通过super关键字继承了来自父类的两个属性:name和age,如果在子类中我们没有调用父类的构造函数...,即在子类中没有使用super关键字,JS引擎就会报错: ?...,因此子类的实例对象可以借助原型访问到子类的原型对象、父类的原型对象上的所有方法,但当我们想要访问父类实例中的属性时,却不能访问到,这是因为super指向父类的原型对象,定义在父类实例上的方法或属性无法通过...对某个属性赋值,这时super就是this,赋值的属性会变成子类实例的属性,故当super.x被赋值为3时,等同于对this.x赋值为3,故当读取this.x时候,其值为3,当读取super.x时,由于其父类原型对象上并没有关于

    76210

    精通 JavaScript 面试

    JavaScript 所支持的面向对象编程包括原型继承(prototypal inheritance)。...类继承和原型继承有什么区别? 类继承(Class Inheritance):实例(instances)由类继承而来(类和实例的关系,可以类比为建筑图纸和实际建筑 ?...原型继承(Prototypal Inheritance):实例/对象直接从其它对象继承而来,创建实例的话,往往用工厂函数(factory functions)或者 Object.create() 方法。...原型:提到了衔接继承(concatenative inheritance)、原型委托( prototype delegation)、函数继承(functional inheritance),以及对象组合...原型继承可以分为下面几类: 委托(delegation,也就是原型) 组合(concatenative,比如混用(mixins)、 Object.assign()) 函数式(functional,这个函数式原型继承不是函数式编程

    71730

    JavaScript面向对象精要(二)

    undefined p.sayHi(); // "hi" 关于对象,请查看:【面向对象的程序设计】、【JavaScript高级技巧-防篡改对象】 五、继承 JavaScript内建的继承方法被称为原型对象...当一个对象的[[Prototype]]设置为另一个对象时,就在这两个对象之间创建了一条原型对象。 1. Object.prototype 所有对象都继承自Object.prototype。...Douglas Crockford(JavaScript之父)推荐在for-in循环中始终使用hasOwnProperty()。...= {}; var obj2 = Object.create(null); "toString" in obj1; // true "toString" in obj2; // false obj2没有原型对象的对象...完全是一个没有任何预定义属性的白板,使其成为一个完美的哈希容器。 4. 构造函数继承 构造函数的所有对象实例共享同一个原型对象,所以它们都继承自该对象,但不能用原型对象继承自有属性。

    43141

    《现代Javascript高级教程》JavaScript中的原型与继承

    不同于传统的基于类的继承,JavaScript的类和继承是基于原型模型的。在ES2015/ES6中引入了class关键字,但其本质仍然是基于原型的语法糖。...原型的重要性体现在以下几个方面: 继承:原型允许对象继承其原型对象上的属性和方法。通过原型,子对象可以访问和复用父对象的属性和方法,实现了继承的概念。...当我们访问一个对象的属性或方法时,如果该对象本身没有这个属性或方法,JavaScript 引擎会自动沿着原型向上查找,直到找到匹配的属性或方法或者到达原型的顶部(Object.prototype)。...寄生组合继承 寄生组合继承是一种常用的原型继承方式,结合了构造函数继承和原型继承的优点,避免了原型中不必要的属性复制和方法重复定义的问题。...- Prototypal Inheritance Eloquent JavaScript - Object-Oriented Programming

    24440

    如何使用 javascript 面向对象编程来唬住面试官(part 2)

    图片引用来自:https://hackernoon.com/understand-nodejs-javascript-object-inheritance-proto-prototype-class-9bd951700b29...javascript 解析器读取到对象之后,会执行一次搜索,如果在当前对象上没有搜索到目标属性的话,就会继续搜索指针指向的原型对象。 这里有2个图帮助理解: ?...例如,要确认 person1有没有 sayName 方法,那么javascript 引擎会先对person1对象本身进行搜索,如果有就直接返回,如果没有就继续搜索他的原型对象 Person Prototype...,如果有就返回,如果没有就报无法找到。...这是一个图, 对象->动物->狗->bichong(狗的大种类)->Foo(狗的小种类)->foo(我家的狗),这就是所谓的原型图的一种情况,也是原型的一个很形象的介绍。 ?

    72620

    JavaScript实现继承的6种方式

    在JavaScript中因为函数没有签名,所以实现继承是 ES 唯一的继承方式,其主要是基于原型来实现的。 1....原型继承 将父类的实例作为子类的原型 function Father() { this.property = true } Father.prototype.getFatherValue =...优点 在父类的原型上新增的方法和属性,子类都能访问到 子类实例对象的原型上既能找到子类构造函数的 prototype,也能找到到父类构造函数的 prototype console.log(son1 instanceof...组合式继承 原型继承和借用构造函数继承的缺点都比较明显,那我们可以综合原型继承、借用构造函数继承的优点组合继承。思路是使用原型继承原型上的属性和方法,借用构造函数继承实例属性。...道格拉斯·克罗克福德(Douglas Crockford)在一篇文章中介绍了一种新的继承方式,严格意义上没有构造函数,不适用自定义类型,通过原型实现对象之间的信息共享。

    36720
    领券