javascript模拟类及类继承

// 模拟Class
		function Rectangle(width, height){
			this.height = height;			// 实例变量(public)
			this.getWidth = function(){ return width; } // 实例变量(private)
			this.setWidth = function(w){ width = w; }
			Rectangle.INSTANCE_COUNT++;
		}
		Rectangle.prototype.getSize = function(){ return { width:this.getWidth(), height:this.height } }	// 实例方法
		Rectangle.INSTANCE_COUNT = 0; 												// 类变量
		Rectangle.getInstanceCount = function(){ return Rectangle.INSTANCE_COUNT; } // 类方法

		var s = new Rectangle(15,15);
		s.setWidth(50);

		console.log(s, s.getSize(), Rectangle.getInstanceCount(), Rectangle.INSTANCE_COUNT);

// 继承
		function PositionRectangle(width, height, x, y){
			Rectangle.call(this, width, height); // 为this添加, width, height属性
			this.x = x;
			this.y = y;
			this.getPosition = function(){ return { x: this.x, y: this.y } }
		}

		PositionRectangle.prototype = new Rectangle(); // 只继承方法
		delete PositionRectangle.prototype.width;
		delete PositionRectangle.prototype.height;

		PositionRectangle.prototype.constructor = PositionRectangle; // 修正构造函数

		s = new PositionRectangle(15,15,10,10);
		console.log(s, s.getSize(), s.getPosition(), Rectangle.getInstanceCount(), Rectangle.INSTANCE_COUNT);
时间: 2024-10-05 01:20:23

javascript模拟类及类继承的相关文章

javascript定义类和类的实现

首先说说类,在一个类里我们会有以下的几个特征: 1. 公有方法 2. 私有方法 3. 属性 4. 私有变量 5. 析构函数 我们直接看一个例子: /***定义类***/ var Class = function(){ var _self = this;//把本身引用负值到一变量上 var _Field = "Test Field"; //私有字段 var privateMethod = function(){ //私有方法 alert(_self.Property); //调用属性 }

深入JavaScript对象(Object)与类(class),详细了解类、原型

JavaScript基于原型的对象机制 JavaScript原型上的哪些事 一.JavaScript基于原型的对象机制 JavaScript对象是基于原型的面向对象机制.在一定程度上js基于原型的对象机制依然维持了类的基本特征:抽象.封装.继承.多态.面向类的设计模式:实例化.继承.多态,这些无法直接对应到JavaScript的对象机制.与强类型语言的类相对应的是JavaScript的原型,所以,只能是基于原型来模拟实现类的设计模式. 为了便于理解,这里采用了Function构造函数及对象原型链

类与类之间关系,用C#和JavaScript体现

前言 类之间的关系有六种,分别是: 关联关系(Association) 泛化关系(Generalization) 依赖(Dependency) 聚合(Aggregation) 组合(Composite) 类与类之间关系 关联(Association) 两个相对独立的对象,当一个对象的实例与另一个对象的实例存在固定关系时,这两个对象之间就存在关联关系,关联体现的是一种强关联关系,关联关系形式有四种:单向关联.双向关联.自身关联和多维关联. 单向关联 场景:订单和商品,订单中包含商品,但是商品并不知

Effective JavaScript Item 51 在类数组对象上重用数组方法

Array.prototype对象上的标准方法被设计为也可以在其它对象上重用 - 即使不是继承自Array的对象.因此,在JavaScript中存折一些类数组对象(Array-like Objects). 一个典型的例子是函数的arguments对象,在Item 22中对它进行过介绍.该对象并不继承自Array.prototype,所以我们不能直接调用arguments.forEach来对其中的元素进行遍历.但是,我们可以通过首先得到forEach方法的对象,然后调用call方法(可以参考Ite

类型转换,类与类之间的转换,继承关系,继承与静态变量,子类父类重名,多继承,虚基类

 常量的基本类型转换,例如:int num(10.8),这种方式是隐式转换. 通过函数的构造函数实现转换. 类类转换函数,当构造函数不能将类型转换成基本类型时.所以就有了类类转换函数,通过这种方式. 案例: #include <iostream> class fushu { public: //通过加explicit的这种方式避免隐式转换,避免引发歧义 explicit fushu(int num) { x = num; y = num; } void print() { std::cou

面向对象JS ES5/ES6 类的书写 继承的实现 new关键字执行 this指向 原型链

一 .什么是面向对象? 面向对象(Object Oriented),简写OO,是一种软件开发方法. 面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物. 面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构.应用平台.分布式系统.网络管理结构.CAD技术.人工智能等领域. 面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式. 编程范式 一般可以

【python】-- 类的多继承、经典类、新式类

继承知识点补充 在python还支持多继承,但是一般我们很少用,有些语言干脆就不支持多继承,有多继承,就会带来两个概念,经典类和新式类. 一.多继承 之前我们都是讲的单继承,那么什么是多继承呢?说白了,就是:子类可以继承多个父类,就叫多继承. class SchoolMember(object): #SchoolMember类 '''学校成员基类''' def tell(self): print("the schoolmeber is tell...") class School(ob

面向对象【day07】:类的属性-继承-经典类

本节内容 类的公有属性 析构函数 类的继承 新式类和经典类 一.类的公有属性 一.概述 前面我们讲了类的私有属性,现在我们来说说类的公有属性,这边很容易被人弄混淆,有人觉的,在__init__()构造方法中,除了私有属性,其他的都是公有属性了,其实这是一个错误的结论,并不是定义在__init__()初始化方法中的属性是公有属性(除私有属性),那什么是公有属性呢?揭起了大家的好奇心. 定义:指的是所属这个类的所有对象,都可以访问的属性,叫做公有属性. 二.公有属性 2.1 定义 说明:在类中直接定

python_way.day7 模块(configparser,xml,shutil,subprocess)、面向对象(上)(创建类,类的构成,函数式编程与面向对象编程的选择,类的继承)

python_way.day7 1.模块 configparser,xml,shutil,subprocess 2.面向对象(上) 创建类,类的构成,函数式编程与面向对象编程的选择,类的继承 1.模块 configparser 用于处理特定格式的文件,其本职上使用open来操作,只能是  [test1] 特定的格式 [test1] k1 = 123 k2 = True [test2] k1 = 123 k2 = v1 文件内容 1.获取 import configparser #打开文件找到文件

038类和对象:继承

继承1.继承简单使用:   格式:class DerivefClassName(BaseClassName):         BaseClassName:为基类.父类或超类         DerriverfClassName:为子类   如:>>> class Parent:             #父类       ...     def hello(self):       ...         print("father")       ...