js继承

一文看懂JS继承

孤街浪徒 提交于 2019-12-19 18:52:21
继承是OOP中大家最喜欢谈论的内容之一,一般来说,继承都两种方式:接口继承和实现继承而JavaScript中没有接口继承需要的方法,因此只能依靠实现继承。 在讲继承的实现之前,我们首先来回顾一下什么是继承?继承的作用是什么? 它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。 通过继承创建的新类称为“子类”或“派生类”。 被继承的类称为“基类”、“父类”或“超类”。 在清楚继承的作用之后,下面我们来探讨一下JS中的几种继承实现的方式: //混入式继承(拷贝)//obj2继承到obj1中的成员,可以直接将obj1中的成员拷贝到obj2中即可var obj1 = {name:"zs",age:10};var obj2 = {};// 将obj1中的成员拷贝到obj2中for (var key in obj1) { obj2[key] = obj1[key]; }console.log(obj1);console.log(obj2); 最终得到的obj2中的成员和obj1中的成员完全一致,当然,我们需要清除的是,此时的obj1和obj2是两个不同的对象。 混入式继承方式看似很简单,但是存在共享数据安全的问题。 var obj1 = {name:"zs",age:10,car:{name:"mini"}};var obj2 = {};//

JS继承的原理、方式和应用

自作多情 提交于 2019-12-06 07:14:10
概要: 一.、继承的原理 二、继承的几种方式 三、继承的应用场景 什么是继承? 继承:子类可以使用父类的所有功能,并且对这些功能进行扩展。继承的过程,就是从一般到特殊的过程。 要了解JS继承必须要了解this的指向,原型prototype、构造器constructor、原型链_proto_; 第一:关于this的指向问题: // "use strict" //严格模式(strict mode)即在严格的条件下运行,在严格模式下,很多正常情况下不会报错的问题语句,将会报错并阻止运行 //this是什么? JS关键字,在JS中具有特殊意义,代表一个空间地址 //this指向:this最终指向的是运行时调用该函数的对象 // 一、初始情况下 // 全局作用域下的this指向:即this和window指向同一个堆内存 this == window; //true this === window; //true // console.log("init," + this) //二、函数和对象里的this的指向 var x = "x"; function test() { var x = 1; // this.x = 2; console.log(this); console.log(this ? this.x : ''); } //直接调用 test(); //

面向对象的特性

匿名 (未验证) 提交于 2019-12-03 00:22:01
JavaScript面向对象的特性 1. 封装性 对象是将数据与功能组合到一起, 即封装 js 对象就是 键值对的集合 键值如果是数据( 基本数据, 复合数据, 空数据 ), 就称为属性 如果键值是函数, 那么就称为方法 对象就是将属性与方法封装起来 方法是将过程封装起来 2. 继承性 所谓继承就是自己没有, 别人有,拿过来为自己所用, 并成为自己的东西 2.1. 传统继承基于模板 子类可以使用从父类继承的属性和方法。 class Person { string name; int age; } class Student : Person { } var stu = new Student(); stu.name 即:让某个类型的对象获得另一个类型的对象的属性的方法 2.2. js 继承基于对象 在JavaScript中,继承就是当前对象可以使用其他对象的方法和属性。 js继承实现举例:混入(mix) function mix ( o1, o2 ) { for ( var k in o2 ) { o1[ k ] = o2[ k ]; } } 3. 多态性(基于强类型) 只做了解 把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。 动物 animal = new 子类(); // 子类:麻雀、狗、猫、猪、狐狸...

JS继承的实现方式

混江龙づ霸主 提交于 2019-11-29 19:59:16
前言 JS作为面向对象的弱类型语言,继承也是其非常强大的特性之一。那么如何在JS中实现继承呢?让我们拭目以待。 既然要实现继承,那么首先我们得有一个父类,代码如下: // 定义一个动物类 function Animal (name) { // 属性 this.name = name || 'Animal'; // 实例方法 this.sleep = function(){ console.log(this.name + '正在睡觉!'); } } // 原型方法 Animal.prototype.eat = function(food) { console.log(this.name + '正在吃:' + food); }; 1、原型链继承 核心: 将父类的实例作为子类的原型 function Cat(){ } Cat.prototype = new Animal(); Cat.prototype.name = 'cat'; // Test Code var cat = new Cat(); console.log(cat.name); console.log(cat.eat('fish')); console.log(cat.sleep()); console.log(cat instanceof Animal); //true console.log(cat

JS继承的几种方式

早过忘川 提交于 2019-11-29 19:58:42
JS作为面向对象的弱类型语言,继承也是其非常强大的特性之一。 既然要实现继承,那么我们先定义一个父类: // 定义一个动物类 function Animal (name) { // 属性 this.name = name || 'Animal'; // 实例方法 this.sleep = function(){ alert(this.name + '正在睡觉!'); } } // 原型方法 Animal.prototype.eat = function(food) { alert(this.name + '正在吃:' + food); }; 1、原型链继承 核心: 将父类的实例作为子类的原型 function Cat(){ } Cat.prototype = new Animal(); Cat.prototype.name = 'cat'; // Test Code var cat = new Cat(); alert(cat.name); alert(cat.eat('fish')); alert(cat.sleep()); alert(cat instanceof Animal); //true alert(cat instanceof Cat); //true 特点: 非常纯粹的继承关系,实例是子类的实例,也是父类的实例 父类新增原型方法/原型属性,子类都能访问到 缺点:

JS继承

感情迁移 提交于 2019-11-29 14:23:54
JS 中的继承是什么? 两次的原型搜索就是继承。 数组 a 从 Array 中原型搜索到 toString 属性,只是实例属性;a 从 Array 中原型搜索到 (Array 从 Object 中原型搜索到的)valueOf 属性,可以称为继承。 让我们用代码来实现继承: 1. 使用 prototype 实现继承 prototype 的作用:为构造函数内添加实例对象之间的共有属性 // 构造一个 人类 function Human(name){ this.name = name } // 给所有 人类 添加一个 跑 的共有属性 Human.prototype.run = function(){ console.log("我叫"+this.name+",我在跑") return undefined } // 构造一个 男人类 function Man(name){ Human.call(this, name) this.gender = '男' } // 所有 男人 都有好战属性 Man.prototype.fight = function(){ console.log('糊你熊脸') } 2. ES6 实现继承 上面代码的 ES6 版本 // ES6 写法 class Human{ constructor(name){ this.name = name } run(){

js继承之原型继承

瘦欲@ 提交于 2019-11-27 19:33:07
https://www.cnblogs.com/sarahwang/p/6870072.html 面向对象编程都会涉及到继承这个概念,JS中实现继承的方式主要是通过原型链的方法。 一、构造函数、原型与实例之间的关系   每创建一个函数,该函数就会自动带有一个 prototype 属性。 该属性是个指针,指向了一个对象 ,我们称之为 原型对象 。什么是指针?指针就好比学生的学号,原型对象则是那个学生。我们通过学号找到唯一的那个学生。假设突然,指针设置 null, 学号重置空了,不要慌,对象还存在,学生也没消失。只是不好找了。   原型对象上默认有一个属性 constructor ,该属性也是一个指针,指向其相关联的构造函数。   通过调用构造函数产生的实例,都有一个 内部属性 ,指向了原型对象。所以实例能够访问原型对象上的所有属性和方法。      所以三者的关系是,每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针。 通俗点说就是,实例通过内部指针可以访问到原型对象,原型对象通过constructor指针,又可以找到构造函数。    下面看一个例子: 1 2 3 4 5 6 7 8 9 function Dog (name) { this .name = name; this .type = 'Dog' ; } Dog

面向对象

家住魔仙堡 提交于 2019-11-27 12:00:42
JS面向对象 1.JS面向对象的含义:通过函数封装得到的有一个类(函数); 2.每个类(函数)天生有一个prototype的属性,这个prototype又是一个对象,这个对象里有个constructor(构造函数)的属性,属性值是类本身。 3.我们所有new 一个类的时候,其实是调用它的构造函数。构造函数里的属性都是私有的,构造函数里的this都是实例对象。 4. 每个对象天生有一个 __proto__, 指向类的原型。 5.Prototype和__proto__ prototype是类的或者函数的,__proto__是对象的 Prototype是存储机制,程序员来实现。__proto__是查找机制(浏览器的) 6.原型链 首先定义一个对象,其次看这个对象的属性是否是私有的,是就直接使用,不是的就通过__proto__往他的类的prototype上查找,有就直接使用,没有就继续向上查找,直到查找到基类Object,没有就是undefined,有就直接使用。这种查找机制 叫原型链。 7. 面向对象有三大特点 :封装 继承 多态 封装:把所有相关的属性和方法封装在一个对象里。 继承:自己没有的属性或者方法,把别人的拿来用。 多态:不同的对象根据事件情况,执行代码不同。 8. JS继承   1.原型继承:将父类的实例赋值给子类的原型私有的公有的都继承为公有的 2.call继承

面向对象

妖精的绣舞 提交于 2019-11-27 10:50:48
一、基础了解(面向对象:简称 OOP 是一种程序设置模式) 面向对象是一个思想,就是把解决问题的注意力集中到对象上,把所有相关的属性和方法封装到一个对象中 一般基础的编程都是面向过程的,涉及到大的网站的时候通常都采用面向对象的方法   面向对象基于面向过程但又不等同于面向过程,他是在面向过程的基础上,对涉及到的代码进行封装,然后调用,实现效果   类:通过class定义,首字母要大写   对象:是类的实例 通过new关键字,得到一个实例对象 二、优势 面向对象大大节省了代码的重用,减少了代码量   对象只是一种特殊的数据。对象拥有 属性 和 方法 。 三、特征 三大特征:封装、继承、多态 继承:通过继承,可以使子类获取到父类的属性和方法,从而能够提高代码的复用性,他不仅拥有父级的属性和方法,还有独属于他的属性方法   多态:不同的对象可以定义相同名称的方法,方法作用于所在的对象中。这种不同对象通过相同方法的调用实现各自行为的能力,被称之为多态。 四、面向对象中的this指向 在全局中,this指向window;   在绑定事件的是处理函数中,this指向事件源 在对象的方法中使用,this指向那个对象本身 在定时器中调用函数使用,this指向window js js继承   1、原型继承:将父类的实例对象赋值给子类的原型 私有的、公有的都继承为公有的。 function