javascript面向对象编程实现[定义(静态)属性方法--继承]
javascript面向对象编程实现:
1.类的声明:
function test1(){
this.p1 = "p1";
this.p2 = "p2";
this.f1 = function(){ alert("f1"); }
this.f2 = function(){ akert("f2"); }
}
上面的代码声明了两个公有的属性p1和p2,两个方法f1和f2.
如何申明私有变量呢?
function test1(){
var _test = "test";
this.p1 = "p1";
this.p2 = "p2";
this.f1 = function(){ alert("f1"); }
this.f2 = function(){ akert("f2"); }
}
上面的代码通过var关键字声明了一个局部变量_test,其作用域是test1类定义的内部,对外不公开.
如何申明类的静态变量和静态方法呢?
test1.staticProp = "static var";
test1.staticMethod = function(){
alert("static method");
}
还可以通过javascript中对象的prototype属性来申明类的实例属性或方法:
test1.prototype.prop2 = "prop2";
test2.prototype.method2 = function(){
alert(" this.prop2");
}
` 利用prototype属性,可以实现另一种类的声明方法:
function test(){}
test.prototype = {
p1 : "p1",
p2 : "p2",
f1 : function(){
alert("f1");
}
}
如何实现类的继承呢?通过复制父类的所有属性和方法来实现子类的继承:
用for(....in ....)方法来实现遍历父类所有的属性和方法
这里看看我如何让新声明的test1类继承test类的:
function test1(){}//定义新声明的test1类.
var p;
for(p in test.prototype){ //遍历父类的所有属性和方法
test1.prototype[p] = test.prtotype[p]; //把父类的所有属性和方法全部复制到新声明的子类test1中
}
test1.prototype.newMethod = function(){//定义新声明的子类test1的新方法
alert("new method");
}
其实prototype框架已经帮我们实现了这种继承,我们来看看它是如何实现的:
Object.extend = function(destination, source){
for(property in source){
destination[property] = source[property];
}
return destination;
}
Prototype框架为Object对象定义了extend方法,该方法有两个参数destination和source,分别对应于子类和父类,所以我们前面所讲的test1继承test可以简化代码如下:
function test1(){
test1.prototype = Object.extend({
newMethod : function(){
alert("new method");
}
},
test.prototype
);
如果我们改变一下上述代码中extend方法中的两个参数的顺序:
function test1(){
test1.prototype = Object.extend(
test.prototype,
{
newMethod : function(){
alert("new method");
}
},
);
可以发现,对于test1子类来说效果是相同的..
但是,我们进一步会发现,父类test确拥有了子类test1的新增方法,虽然这不是我们最初想要的继承效果,但是这种方法却使我们有了扩展对象属性或者方法的手段了,不是吗?
转载于:https://www.cnblogs.com/GT_Andy/archive/2010/05/14/1921773.html
javascript面向对象编程实现[定义(静态)属性方法--继承]相关推荐
- JavaScript 面向对象编程(二) —— 构造函数 / 原型 / 继承 / ES5 新增方法
本篇为 JavaScript 进阶 ES6 系列笔记第二篇,将陆续更新后续内容.参考:JavaScript 进阶面向对象 ES6 :ECMAScript 6 入门 : Javascript 继承机制的 ...
- Javascript面向对象编程(二) 构造函数的继承
标注:(转载自:http://www.jb51.net/article/28128.htm) 今天要介绍的是,如何生成一个"继承"多个对象的实例. 比如,现在有一个"动 ...
- JavaScript 面向对象编程(三) —— 函数进阶 / 严格模式 / 高阶函数 / 闭包 / 浅拷贝和深拷贝
本篇为 JavaScript 进阶 ES6 系列笔记第三篇,将陆续更新后续内容.参考:JavaScript 进阶面向对象 ES6 :ECMAScript 6 入门 系列笔记: JavaScript 面 ...
- JavaScript 面向对象编程(四) —— 正则表达式
本篇为 JavaScript 进阶 ES6 系列笔记第四篇,将陆续更新后续内容.参考:JavaScript 进阶面向对象 ES6 : 系列笔记: JavaScript 面向对象编程(一) -- 面向对 ...
- JavaScript面向对象编程(2)-- 类的定义
javascript面向对象编程(2)-- 类的定义 2008-05-29 11:05 by johnson2008, 6196 visits, 收藏, 编辑 最近这一段时间事情太多了,没有时间再继续 ...
- Python零基础速成班-第10讲-Python面向对象编程(下),Property属性、特殊方法、设计模式、链表应用
Python零基础速成班-第10讲-Python面向对象编程(下),Property属性.特殊方法.设计模式.链表应用 学习目标 面向对象编程 接上一讲:Property属性.特殊方法.设计模式 面向 ...
- python面向对象编程中方法和属性_Python面向对象编程中关于类和方法的学习笔记...
Python面向对象编程中关于类和方法的学习笔记 类与类方法是面向对象的编程语言中必不可少的特性,本文总结了Python面向对象编程中关于类和方法的学习笔记,需要的朋友可以参考下 类和实例 pytho ...
- 《javascript面向对象编程指南》读书笔记
<javascript面向对象编程指南>读书笔记 <javascript面向对象编程指南>读书笔记 第一章 面向对象的JavaScript 第二章 基本数据类型与流程控制 变量 ...
- JavaScript面向对象编程-第三版不完全系统解读
JavaScript面向对象编程-第三版不完全系统解读 作者:老九-技术大黍 产品:查看原文 社交:知乎 公众号:老九学堂(新手有福利) 特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系笔者 ...
最新文章
- Vim的使用技巧-自动闭合成对符号
- POD – Proof of Delivery
- 探寻用户自定义定时任务的实践方案
- 现代软件工程 - 期末评比及作业要求
- radio select的 option使用
- cocos+kbe问题记录
- linux内核多个补丁,一个令人惊叹的Linux内核补丁
- 计算机组成原理 透明性,计算机组成原理试题
- c语言令牌桶原理,基于多 goroutine 实现令牌桶
- 服务器系统sm总线控制器驱动,sm总线控制器驱动
- 数学建模之层次分析法(含MATLAB代码)
- centos8修改主机名称
- 魔兽世界 圣骑士唯一的远程武器任务
- 干货|语义网、Web3.0、Web3、元宇宙这些概念还傻傻分不清楚?(下)
- ps知识点2-吸管、修复、画笔、仿章
- 内存优化 · 基础论 · 初识 Android 内存优化
- C++ Programming language读书笔记
- 【3-1】找树根和hai子(STL方法)
- 《你有多自律,就有多自由》经典总结
- 掌握论文中英文断字处理及段落行号设置