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

JS对象 - this - 原型 - 可迭代器 - Symbol - 继承

箭头函数的this绑定该函数定义时候所在的作用域指向的对象, call apply bind 不改变它绑定的this 因此用箭头函数来声明对象的方法时候,一定要小心里面的this陷阱,而且箭头函数不能用做构造函数...Object.prototype()获取对象的原型对象 Functions derive from Function.prototype, and arrays derive from Array.prototype...该迭代器有next函数,该函数每次返回一个对象 对象具有一个名叫Symbol.iterator的方法,就是可迭代对象.该方法要返回一个迭代器对象!...迭代器对象要有next方法 // 调用可迭代对象string的迭代器接口方法产生一个迭代器!...value: 'value 1,0' }, done: false } // → { value: { x: 0, y: 1, value: 'value 0,1' }, done: false } 继承

1.3K00

JS对象的简单创建和继承

Object的属性,并具有obj.x = 1 的属性值 但当参数为null时,obj1则是一个没有原型的新对象,不会继承任何东西,甚至没有初始的toString()方法。...); 对象的简单继承: 可以通过原型继承创建一个新对象 以下函数inherit() 返回一个继承自原型对象p的属性的新对象 function inherit(p){ if(p == null)...f.prototype = p; //原型指向要继承对象p return new f(); //创建f对象,此对象继承自p } var obj = {x:1}; var obj1...f.prototype = p; //原型指向要继承对象p return new f(); //创建f对象,此对象继承自p } var o = {}; //o 继承Object.prototype...;在JS中,只有在查询属性时才会体会到继承的存在,而设置属性则和继承无关。

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

    JS 继承

    构造函数、原型对象和实例之间的关系 要弄懂extends继承之前,先来复习一下构造函数、原型对象和实例之间的关系。...推荐阅读JS继承相关的书籍章节 《JavaScript高级程序设计第3版》第6章——面向对象的程序设计 6种继承的方案,分别是原型链继承、借用构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合式继承...《JavaScript面向对象编程第2版》第6章——继承 12种继承的方案: 原型链法(仿传统) 仅从原型继承法 临时构造器法 原型属性拷贝法 全属性拷贝法(即浅拷贝法) 深拷贝法 原型继承法 扩展与增强模式...上卷第6章——行为委托和附录A(ES6中的class) 总结 继承对于JS来说就是父类拥有的方法和属性、静态方法等,子类也要拥有。...继承方法可以有很多,重点在于必须理解并熟。 悉这些对象、原型以及构造器的工作方式,剩下的就简单了。寄生组合式继承是开发者使用比较多的。

    2.9K32

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

    console.log(date.getTest()); 于是,随手用JS中经典的组合寄生法写了一个继承,然后,刚准备完美收工,一运行,却出现了以下的情景: ? 但是的心情是这样的: ?...经典的继承法有何问题 先看看本文最开始时提到的经典继承法实现,如下: /** * 经典的js组合寄生继承 */ function MyDate() {    Date.apply(this, arguments...嗯哼,也就是说,关键是:由于调用的对象不是Date的实例,所以不允许调用,就算是自己通过原型继承的也不行。 为什么无法被继承?...JS内置对象是这些: "Arguments", "Array", "Boolean", "Date", "Error", "Function", "JSON", "Math", "Number", "Object...写在最后的话 由于继承的介绍在网上已经多不胜数,因此本文没有再重复描述,而是由一道Date继承题引发,展开(关键就是原型链)。 不知道看到这里,各位看官是否都已经弄懂了JS中的继承呢?

    1.1K20

    面向对象——继承

    1.什么是继承 继承是从已有类中派生出新的类,新的类吸收已有类当中的状态和行为并扩展出新的能力,是一种从一般到特殊的关系 父类存放共同的状态和行为,子类存放自己特有的状态和行为 java中通过extends...2.继承的作用 减少了代码的冗余提高复用性 划分类别清晰化类的结构 3.继承方法的重写 重写方法的签名要一样(方法名+参数) 重写方法的返回值类型要和父类一样 重写方法的访问权限必须要比父类方法大或者相等...在方法前添加@Override标签可判断该方法是否是重写的父类方法 4.隐藏 本类字段隐藏:方法参数名与字段名相同时 继承字段隐藏:子类有定义字段名和父类一字段同名 继承方法隐藏:子类有一静态方法和父类同名...这里是静态方法而不是实例方法 5.继承的内存分析 载入字节码到方法区时会先将父类载入然后再载入自身 创建对象时构造方法里默认会有super()来调用父类构造方法,即创建对象时在堆中会先开辟一个父类对象然后再此对象...6.Object类 Object是默认的所有类的父类,每个类对象都可以使用像hashCode()、equals(Object obj)、toString()等这些方法。

    45120

    JS进阶:继承

    在理解继承之前,需要知道 js 的三个东西: 什么是 JS 原型链 this 的值到底是什么 JS 的new 到底是干什么的 一、什么是 JS 原型链 我们知道 JS对象,比如 var obj =...当我们「读取」 obj.toString 时,JS 引擎会做下面的事情: 看看 obj 对象本身有没有 toString 属性。没有就走到下一步。 看看 obj....继承分类 image.png 继承方式 1、原型链继承 构造函数、原型和实例之间的关系:每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个原型对象的指针。...继承的本质就是复制,即重写原型对象,代之以一个新类型的实例。...4、原型式继承 利用一个空对象作为中介,将某个对象直接赋值给空对象构造函数的原型。

    4.4K10

    JS中的面向对象、原型、原型链、继承总结大全

    补充: js中说一切都是对象,是不完全的,在js中6种数据类型(Undefined,Null,Number,Boolean,String,Object)中,前五种是基本数据类型,是原始值类型,这些值是在底层实现的...js中提供了像Object,Array,Function等这样的原生的构造函数,同时也可以创建自定义的构造函数,构造函数是一个函数,用来创建并初始化新创建的对象。...中面向对象开发的一种默认模式,介绍了以上这几种常用创建对象的方式, 还有其他不常用的模式就不介绍了,接下来想说的是js中比较重要的继承。...__proto__ === Object.prototype); // true 构造函数模式和原型模式组合继承 只通过原型来实现继承,还存在一定问题,所以js中一般通过借用构造函数和原型组合的方式来实现继承...方法继承,就是上文讲的到的原型链机制继承,另外可以给子构造函数添加自己的属性和方法。 这就是经典继承,避免了但是使用构造函数或者单独使用原型链的缺陷,成为js中最常用的继承方式。

    1.4K22

    js实现继承

    js实现继承 经典继承(原型链) 缺点:过多的继承了没用的属性 Grandfather.prototype.lastName = 'zhang' function Grandfather() {...grandfather的lastName属性,但是由于原型链的关系,造成了son既会继承grandfather自神的东西,grandfather的原型的东西,father自身的东西和father原型上的东西...,造成了不必要的继承 共享原型 本质:重写原型对象 优点:只会继承父的原型,不会继承父原本自带的属性或方法(只有调用new Father()才会继承自身的东西) 缺点:给本身的原型添加属性或方法时,会把继承的那个原型也修改了...本质:重写原型对象 原理:借用构造函数+原型链 缺点:因为需要借用构造函数,还是没有函数复用 Father.prototype.lastName = 'zhang' function Father()...) 雏形 本质:重写原型对象 优点:只会继承父的原型,不会继承父原本自带的属性或方法(只有调用new Father()才会继承自身的东西) 缺点:1,这样继承后即使修改了son的原型也不会修改father

    5.3K20

    知其然,知其所以然,JS 对象创建与继承

    这是我参与「掘金日新计划 · 6 月更文挑战」的第 30 天,点击查看活动详情 小序 在 6 月更文中零零散散讲了 JS对象创建和对象继承,有工友对此还是表示疑惑,要注意:这是两个不同但又相关的东西...这些文章是: 蓦然回首,“工厂、构造、原型”设计模式,正在灯火阑珊处 JS精粹,原型链继承和构造函数继承的 “毛病” “工厂、构造、原型” 设计模式与 JS 继承 JS 高级程序设计 4:class 继承的重点...__proto__ === Object.prototype // true 在 JS 中,万物皆对象对象都是有函数构造而来,函数本身也是对象。...万物由上帝创造(对象由函数构造而来),上帝本身也属于一种物质(函数本身却也是对象); 对于本篇来说,继承,其实都是父子构造函数在继承,然后再由构造函数实例化对象,以此来实现对象继承。...到底是谁在继承?函数?对象

    51440

    JavaScript对象继承

    JavaScript 对象继承 1. 原型链继承 基于原型链,即把一个对象的原型设置为另一个对象的实例,那么这个对象实例也就拥有了另一个对象上的属性。...我们在之前将面向对象时,说过,对象的属性最好定义在构造函数中,需要共享的引用类型的属性再定义在原型上。...组合继承模式 结合原型链和构造函数,原型链实现对原型属性和方法的基础,构造函数实现实例方法的继承: function Father(name) {  this.name = name;  this.nationality...当继承的父对象不是自定义类型和构造函数的情况下,可以采用寄生继承模式。 5. 寄生组合式继承 组合继承模式是最常用的模式,但也不是完美的。组合继承会执行两次父类构造函数。...ES6 中类的继承 在 es6 中,有了 class(JavaScript 的 class 只是一种语法糖,覆盖在基于构造函数和原型的模式上),我们就可以使用 extends 来实现类的继承了: class

    70620

    Python面向对象——继承

    内部使用 3、被继承的类叫做超类,或者叫做父类 4、从超类(父类)继承过来的类叫做子类 5、子类来源于父类,又或者说,子类扩展了父类的功能 """ """ #扩展类:给一个已经存在的类添加新的行为(方法...        print("start scan port: ", port) if __name__ == '__main__':     s = ChildUtil() #实例化子类后,创建出了对象...object类中找,还是没有则引发异常     # 3、因此,可以看出这个查找顺序是就近原则 """ #重写__init__(),普通方法可以重写,初始化也是可以从写的 """ 例如: 有一个类用来描述物理机对象...,并且对象有主机名、IP地址、操作系统这3个基本属性 还有一个类用来描述vmware的虚拟机对象,也有和物理机一样的3个属性,但是虚拟机还有一个vmtools属性 那么,在定义虚拟机类的时候,难道要再重新定义一遍主机名...那么虚拟机类既然还有一个vmtools属性,那么肯定就有初始化方法,但是描述物理机对象的类也有初始化方法 这特么就引发问题了,解决代码如下 """ """ class Host:     def __init

    40720

    【面向对象编程】继承

    1.为什么需要继承 在编程中,继承可以实现代码的复用,减少重复编写代码的工作量。通过继承,子类可以继承父类的属性和方法,并且可以根据需要进行扩展和修改,提高了代码的可维护性和可扩展性。...6.子类构造方法 子类对象构造时,先调用父类的构造方法,在执行子类的构造方 public class test3 { public static void main(String[] args)...不同点: this是当前对象的引用,super是子类对象中对父类继承下来的引用。 this用来访问本类的方法和属性,super是访问的是父类继承下来的方法和属性。...当对象创建时,才执行实例代码块,实例代码块执行完成后才执行构造方法。...当 final 修饰引用数据类型的变量时,该变量所引用的对象地址不能被改变,但对象的内容可以改变。 2.

    6910

    类和对象-继承

    继承是面向对象三大特性之一 定义类时,下级别的成员除了拥有上一级的共性,还有自己的特性,就可以考虑使用继承的技术,减少代码的重复 继承的基本语法 语法:class 子类 : 继承方式 父类 子类也被成为派生类...A//保护继承 { }; class D :private A//私有继承 { }; 继承中的对象模型 父类中所有非静态成员属性都会被子类继承下去 父类中私有的成员属性,是被编译器给隐藏了,因此是访问不到...,但是确实被继承下去了 利用开发人员命令提示工具查看对象模型: 跳转盘符:盘符: 跳转文件路径:cd 具体路径下 查看命名:dir 报告单个类的布局:cl /d1 reportSingleClassLayout...先调用父类构造函数,再调用子类构造函数,析构顺序与构造相反 继承同名成员处理方式 子类对象可以直接访问到子类中的同名成员 子类对象加作用域可以访问到父类同名成员 当子类与父类拥有同名的成员函数,子类会隐藏父类中所有同名成员函数...静态成员跟非静态成员出现同名,处理方法一致,只不过有两种处理方法: 通过对象.

    69000

    【前端】:对象、原型、继承

    对象 1.1. 对象描述符 1.1.1. 数据描述符 1.1.2. 存取描述符 1.2. 不变性 1.2.1....模拟类式继承的常见方法 3.1. 原型链继承 3.2. 借用构造函数 3.3. 组合继承(原型链继承+借用构造函数) 3.4. 共享原型 3.5....禁止扩展(不能新增属性) 如果一个对象可以添加新的属性,则这个对象是可扩展的。...如果你创建了一个新对象并替换了函数默认的 .prototype 对象引用,那么新对象并不会自动获得 .constructor 属性。 ? .constructor 并不是一个不可变属性。...模拟类式继承的常见方法 3.1. 原型链继承 ? ? 3.2. 借用构造函数 ? ? 3.3. 组合继承(原型链继承+借用构造函数) ? ? 3.4. 共享原型 ? ? 3.5. 临时构造函数 ?

    1.1K50

    JS原型继承和类式继承

    类式继承(构造函数) JS中其实是没有类的概念的,所谓的类也是模拟出来的。特别是当我们是用new 关键字的时候,就使得“类”的概念就越像其他语言中的类了。...它有别于类继承是因为继承不在对象本身,而在对象的原型上(prototype)。每一个对象都有原型,在浏览器中它体现在一个隐藏的__proto__属性上。在一些现代浏览器中你可以更改它们。...首先,构造函数继承的方法都会存在父对象之中,每一次实例,都回将funciton保存在内存中,这样的做法毫无以为会带来性能上的问题。其次类式继承是不可变的。...而原型继承是可以通过改变原型链接而对子类进行修改的。另外就是类式继承不支持多重继承,而对于原型继承来说,你只需要写好extend对对象进行扩展即可。...从这里,我们也可以看到类继承和原型基础的一些区别。 结论 原型继承比较符合js这种语言的特点。因为它本身就是js强大的原型的一部分。

    3.4K90
    领券