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

JavaScript继承与聚合

Person类 用Teacher域里面的 this来控制Person域里面的 this (3)调用 Perosn构造函数,因为Perosn没有用 new 所以是个对象(模板)     显示调用call...=Teacher;//确保继承后任然是Teacher自己构造函数  (步骤2)子类扩展一些方法,用于访问从父类继承内容 Teacher.prototype.getBook=function ()...*/ //subClass:子类 superClass:超类(2) function extend(subClass,superClass) { //1,使子类原型属性等于父类原型属性...subClass; //3,子类增加属性 superClass ==》原型链引用 subClass.superClass = superClass.prototype...故此我们可以使用聚合 也就是使用 掺元类  对于聚合有两种情况 第一种是聚合到 var a={}类或者不是用function声明类中 1,首先,需要一个合适可以被聚合类(给体),此时需要在本类内部进行扩展属性

71340
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    一文带你彻底搞懂JavaScript原型链

    是因为它借鉴了C语言基本语法和Self语言使用基于原型(prototype)继承机制。 所以我们也经常可以看到JavaScript被描述一种基于原型语言,每个对象都有一个原型对象。...对象以它原型作为模版、原型上可以继承属性和方法。原型对象也是对象,也有它自己原型对象,并从中继承属性和方法。 一层一层,以此类推…… 如果你愿意一层一层拨开我心~ ?...当然,每个实例对象也原型中继承了该属性。 注意: __proto__属性并不在ECMAScript标准中,只为了开发和调试而生,不具备通用性,不能出现在正式代码中。...function Demo(){}; var demo = new Demo(); console.log(Object.getPrototypeOf(demo)); // 打印结果Demo相关联原型对象...console.log(Object instanceof Function); //true 注意:不要错误认为instanceof检查是该实例对象是否当前构造函数实例化创建,其实它检查是实例对象是否当前指定构造函数原型对象继承属性

    35821

    JS原型链与继承别再被问倒了

    基本思路: 使用原型链实现对原型属性和方法继承,通过借用构造函数来实现对实例属性继承. 这样,既通过在原型上定义方法实现了函数复用,又能保证每个实例都有它自己属性....在 ECMAScript5 中,通过新增 object.create() 方法规范化了上面的原型式继承. object.create() 接收两个参数: 一个用作新对象原型对象 (可选)一个新对象定义额外属性对象...新对象不仅具有 person 所有属性和方法, 而且还被增强了, 拥有了sayH()方法. 注意: 使用寄生式继承对象添加函数, 会由于不能做到函数复用而降低效率;这一点与构造函数模式类似....我们可以这么理解: 以 new 操作符调用构造函数时候,函数内部实际上发生以下变化: 1、创建一个对象,并且 this 变量引用该对象,同时还继承了该函数原型。...__proto__ 属性是指定原型关键 以上, 通过设置 __proto__ 属性继承了父类, 如果去掉new 操作, 直接参考如下写法 subClass.prototype = superClass.prototype

    61850

    JavaScript设计模式--简单工厂模式

    subClass,superClass) { //1,使子类原型属性等于父类原型属性 //初始化一个中间对象,目的是为了转换主父关系 var F = function ()...= subClass; //3,子类增加属性 superClass ==》原型链引用 subClass.superClass = superClass.prototype;...此处同样是根据上述进行改进,还是简单说明一下实现过程 (1)在html中将接口文件引进,代码 //定义一个静态方法来实现接口与实现类直接检验 //静态方法不要写出Interface.prototype...extend(subClass,superClass) { //1,使子类原型属性等于父类原型属性 //初始化一个中间对象,目的是为了转换主父关系 var F = function...subClass.prototype.constructor = subClass; //3,子类增加属性 superClass ==》原型链引用 subClass.superClass

    58430

    前端-如何继承 Date 对象?由一道题彻底弄懂 JS 继承

    (主要是结合本文继承Date来说) 区别:(以 SubClass, SuperClass, instance例) ES5中继承实质是:(那种经典组合寄生继承法) 1、先由子类( SubClass)... SubClass和 SuperClass所有实例属性,以及可以通过原型链回溯,获取 SubClass和 SuperClass原型上方法 ES6中继承实质是: 1、先由父类( SuperClass...),这一步很关键,否则无法找到子类原型(注,子类构造中加工这一步实际做法是推测出最终效果来推测) 3、然后同样,子类原型( SubClass.prototype)指向父类原型( SuperClass.prototype...) 4、所以 instance是父类( SuperClass)构造出(所以有着父类 [[Class]]关键标志) 5、所以, instance有 SubClass和 SuperClass所有实例属性...: // ~~~new.target.name:MyDate~~~~ // MyDate 然后,可以在上面的示例中看到,就算是ES6Class继承, MyDate构造中打印 new.target也显示

    1.1K20

    对Python老司机99%有帮助简明语法总结乱编

    表示 布尔运算符:and or not 值:None python并无实质常量,只有约定常量,全大写表示(个人觉得使用objective-ck开头表示法也不错。...继承和多态 继承就在定义时候写上父类名称,多态就覆盖父类方法。...获取对象信息 使用type()判断类型信息 使用isinstance()判断继承关系 使用dir()获取对象所有方法和属性 面向对象高级编程 ---- 使用slots 动态添加属性:instance.pro...__ = (被允许属性) 使用@property 如下,定义了一个score属性 @propertydefscore(self):returnself....str打印类时信息 repr直接写打印出来信息 iter用于for ... in迭代,__iter__返回下一个迭代对象,next()用于拿到循环下一个值 getitem提供下标访问 getattr

    1.3K70

    ECMAScript中类与继承详解(Java对比学习)

    #name) // -> SyntaxError 类中构造函数 二者同: 如果声明一个一个类时候没有声明构造函数,那么会默认添加一个构造函数,构造函数在new实例化一个对象时候会被调用 二者异...类中继承 二者同: 继承关键字都是extends,super方法使用 二者异: 继承调用: ES6需要注意是super只能调用父类方法,而不能调用父类属性,方法定义再原型链中,属性定义在类内部...在子类中,没有构造函数,那么在默认构造方法内部自动调用super方法,继承父类全部属性,子类构造方法中,必须先调用super方法,然后才能调用this关键字声明其它属性。...(类)函数,但是却可以调用原型链函数 Object.getOwnPropertyNames(p)//[ 'name', 'age' ] 输出结果可以看出只有这两个属性,不具有getInfo函数 console.log...//直接打印类 console.log(Person); console.log(Point===Point.prototype.constructor);//true 与ES5一样,实例属性除非显式定义在其本身

    42810

    Web 前端面试经历——百度

    Array]“字符串作为结果(看过ECMA标准应该都知道,[[]]用来表示语言内部用到、外部不可直接访问属性,称为“内部属性”)。...利用这个方法,再配合call,我们可以取得任何对象内部属性[[Class]],然后把类型检测转化为字符串比较,以达到我们目的。...(主要是结合本文继承Date来说) 区别:(以 SubClass, SuperClass, instance例) ES5中继承实质是:(那种经典组合寄生继承法) 先由子类( SubClass)构造出实例对象...和 SuperClass所有实例属性,以及可以通过原型链回溯,获取 SubClass和 SuperClass原型上方法 ES6中继承实质是: 先由父类( SuperClass)构造出实例对象this...: // ~~~new.target.name:MyDate~~~~ // MyDate 然后,可以在上面的示例中看到,就算是ES6Class继承, MyDate构造中打印 new.target也显示

    64610

    【iOS底层】 类结构分析

    1.类结构和定义 首先跟踪源码,找到Class定义,发现其本质objc_class类型指针,并且 objc_class继承自objc_object,其中objc_class中有一个隐藏isa...bits理论地址,但是打印结果很迷茫,这里我们强转一下,再次打印,终于打印出class_data_bits_t结构体 // 第二步 (lldb) po 0x1000023d0 objc[1017...p $6.list,此时出现property_list_t类型,继承自entsize_list_tt,在其内部发现first方法,尝试打印,最后找到了属性nickName (lldb) p $5.properties...) 到这里,成员变量存放位置我们也已经找到,但是我们只是定义了一个hobby属性,但是count显示个数2,我们用get方法拿到剩余一个值_nickName,这里也证明了属性定义会自动生成对应成员变量...) 但是可以发现,其数组个数count=4,也就是除了我们定义sayHello方法之外还有另外三个方法 输出打印其他三个方法名称依次C++析构函数destruct方法,属性nickNamegetter

    34010

    一份走心iOS开发规范

    他们继承关系是这样FinalClass->SubClass->SuperClass,现只实现了SuperClass方法initialize方法。...:03.130815+0800 Demo[67162:11721965] superClass initalize 解释: 因为FinalClass继承自SubClass,SubClass继承SuperClass...又因为他(FinalClass)父类(SubClass)也没有实现initialize方法,又会继续沿着继承体系,向上游寻找,最后找到SubClass父类(SuperClass)。...} 【必须】和init方法一样,禁止在dealloc方法中使用self.xxx方式访问属性。如果存在继承情况下,很有可能导致崩溃。...【建议】因为方法或属性本身就具有自我描述性,注释应该简明扼要,说明是什么和为什么即可。 (2.17) 类设计规范 【建议】尽量减少继承,类继承关系不要超过3层。

    12K145

    Swift学习:构造器(下)

    //重写一个可失败构造器一个示例如下: //父类Person:要求其name属性必须是非空字符串或者nil class Person { var name:String?...//该构造器可创建name属性是nilPerson实例 init(){} //父类可失败构造器,当传入参数时候,不能创建有效实例 init?...//因为这里很好处理了空字符串情况,无论传入参数是否是空字符串,都将创建有效实例 //注意:可以用非可失败构造器重写可失败构造器,但反过来却不行。...//1.子类重写父类必要构造器,构造器前也必须添加required修饰符,表明该构造器要求也应用于继承链后面的子类。...在构造过程中,我们可以使用闭包或全局函数某个存储型属性提供定制默认值。

    80470

    JS原生方法原理探究(六) Babel 转译过程浅谈 ES6 实现继承原理

    value,此时设置该属性可写 ES6 继承是如何实现 好了,基本搞清楚一个 class 原理之后,现在我们来看一下 ES6 是如何实现继承。... extends 看 JS 继承这篇文章进行了解释,这里我就不重复了)。 接着,调用 Object.create 设置父类原型子类原型 __proto__。...之后,result 可能有三种取值: 一个继承了父类实例所有属性子类实例 父类构造函数调用结果,可能是父类构造函数中自定义返回一个非对象 父类构造函数调用结果,可能是默认返回 undefined...这里 result 我们知道也有两种取值,如果是一个继承了父类实例所有属性子类实例,那么实际上等价于经过增强 this;如果是父类构造函数中自定义返回一个非对象,则意味着调用 Son构造函数之后返回对象实际上并没有继承父类中声明实例属性...(一个对象),它并没有继承在父类上声明实例属性 `a`。

    1.1K20

    JS原生方法原理探究(六) Babel 转译过程浅谈 ES6 实现继承原理

    value,此时设置该属性可写 ES6 继承是如何实现 好了,基本搞清楚一个 class 原理之后,现在我们来看一下 ES6 是如何实现继承。... extends 看 JS 继承这篇文章进行了解释,这里我就不重复了)。 接着,调用 Object.create 设置父类原型子类原型 __proto__。...之后,result 可能有三种取值: 一个继承了父类实例所有属性子类实例 父类构造函数调用结果,可能是父类构造函数中自定义返回一个非对象 父类构造函数调用结果,可能是默认返回 undefined...这里 result 我们知道也有两种取值,如果是一个继承了父类实例所有属性子类实例,那么实际上等价于经过增强 this;如果是父类构造函数中自定义返回一个非对象,则意味着调用 Son构造函数之后返回对象实际上并没有继承父类中声明实例属性...(一个对象),它并没有继承在父类上声明实例属性 `a`。

    1.1K10

    iOS底层原理总结 - 探寻Runtime本质(四)

    super本质 首先来看一道面试题。 下列代码中Person继承自NSObject,Student继承自Person,写出下列代码输出内容。...*/ // 父类是第一个开始查找类 }; objc_super结构体中可以发现receiver消息接受者仍然self,superclass仅仅是用来告知消息查找哪一个类开始。...(self); } class内部实现是根据消息接受者返回其对应类对象,最终会找到基类方法列表中,而self和super区别仅仅是self本类类对象开始查找方法,super从父类类对象开始查找方法...为什么self.name打印内容ViewController对象 问题出在[super viewDidLoad];这段代码中,通过上述对super本质分析我们知道,super内部调用objc_msgSendSuper2...获取成员变量相关信息,传入成员变量信息,返回C语言字符串 const char *ivar_getName(Ivar v) 6.

    91940

    Swift 中反射 Mirror

    errorCode) } 打印结果: 我们看到,对于some这值,并没有存储到字典中,因为swift中字典对于值是删除意思。...如果想将其转换成json还需修改"[]""{}",这个对于数组和对象还不好区分,另外对于json字符串一些value也有可能是应一串json还需要添加转义字符等。...来说,继承链上一共四个类,7个属性。...: 此时我们就可以看到第三属性height打印,如果advanced(by: 0)则打印第一个属性,以此类推。...和属性个数创建一个buffer数组指针 接下来我们就可以数组中取出每个属性偏移值 然后取出结构体实例p内存地址 然后按照buffer数组中偏移值进行偏移,重绑定为属性类型 最后就可以打印属性值了

    5.1K10

    Java核心(二)注解

    : 所有注解类型都会继承 Annotation 接口 手工显示继承 Annotation 接口,不会定义成一个注解类型 Annotation 本身并不会定义成一个注解类型 编写一个注解 @Retention...extends SuperClass{ } 父类 SuperClass 被注解 @Demo 标记了,子类 ChildClass 继承了父类 SuperClass 且子类没有被任何注解标记过,...注意: 使用了 @Repeatable 标记了 Demo注解,指定了 Role.class 作为属性值,并且 Role 注解必须属性名为 value, 且类型 Demo 数组形式。...注解属性 注解只有变量(属性),没有方法, 注解属性是以 无参方法形式 声明。...案例: http接口中,请求参数是字符串形式,将请求参数转换为请求实体类。对参数进行校验时,需要检查某些字段是否,以及整型数值大小校验。

    18310
    领券