javascript --- 面向对象 --- 封装
javascript中有原型对象和实例对象
如有疑问请参考:http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html
下面的代码可以用Rhino解释,代码如下:
/** * Cat的对象 * name、color;猫科动物,吃老鼠 */ print("--- --- --- 生成对象的原始模式 --- ---"); /*var Cat = { name : '', color : '' };*/ var cat1 = {}; cat1.name = "mao1"; cat1.colr = "orange"; print("cat1 : name=" + cat1.name + ", color=" + cat1.colr); print(); print("--- --- --- 原始模式的改进 --- ---"); function Cat1(name,color){ return { name:name, color:color }; }; var cat2 = Cat1("mao2", "yellow"); print("cat2 : name=" + cat2.name + ", color=" + cat2.color); print(); print("--- --- --- 构造函数模式 --- ---"); function Cat2(name, color){ this.name = name; this.color = color; } var cat3 = new Cat2("mao3", "blue"); print("cat3 : name=" + cat3.name + ", color=" + cat3.color); print("cat3.constructor == Cat2 --- " + (cat3.constructor == Cat2)); print("cat3 instanceof Cat2 --- --- " + (cat3 instanceof Cat2)); print(); print("--- --- --- 构造函数模式的问题 --- ---"); function Cat3(name, color){ this.name = name; this.color = color; this.type = "猫科动物"; this.eat = function(){ print("吃老鼠"); }; } var cat4 = new Cat3("mao4", "red"); var cat5 = new Cat3("mao5", "pink"); print("cat4 : name=" + cat4.name + ", color=" + cat4.color + ", type=" + cat4.type); cat4.eat(); print("cat5 : name=" + cat5.name + ", color=" + cat5.color + ", type=" + cat5.type); cat5.eat(); print("cat4.type == cat5.type --- --- " + (cat4.type == cat5.type)); print("cat4.eat == cat5.eat() --- --- " + (cat4.eat == cat5.eat)); print(); print("--- --- --- Prototype模式 --- ---"); function Cat4(name,color){ this.name = name; this.color = color; } Cat4.prototype.type = "猫科动物"; Cat4.prototype.eat = function(){ print("吃老鼠"); }; var cat6 = new Cat4("mao6", "green"); var cat7 = new Cat4("mao7", "gray"); print("cat6 : name=" + cat6.name + ", color=" + cat6.color + ", type=" + cat6.type); cat6.eat(); print("cat7 : name=" + cat7.name + ", color=" + cat7.color + ", type=" + cat7.type); cat7.eat(); print("cat6.type == cat7.type --- --- " + (cat6.type == cat7.type)); print("cat6.eat == cat7.eat --- --- - " + (cat6.eat == cat7.eat)); print(); print("--- --- --- Prototype模式的验证方法 --- ---"); print("Cat4.prototype.isPrototypeOf(cat6) --- " + Cat4.prototype.isPrototypeOf(cat6)); print("Cat4.prototype.isPrototypeOf(cat5) --- " + Cat4.prototype.isPrototypeOf(cat5)); print('cat6.hasOwnProperty("name") --- --- ' + cat6.hasOwnProperty("name")); print('cat6.hasOwnProperty("type") --- --- ' + cat6.hasOwnProperty("type")); print('"name" in cat7 --- ---' + ("name" in cat7)); print('"colr" in cat7 --- ---' + ("colr" in cat7)); for(var prop in cat7) { print("\tcat7["+prop+"] = " + cat7[prop]); }
打印结果如下:
--- --- --- 生成对象的原始模式 --- --- cat1 : name=mao1, color=orange --- --- --- 原始模式的改进 --- --- cat2 : name=mao2, color=yellow --- --- --- 构造函数模式 --- --- cat3 : name=mao3, color=blue cat3.constructor == Cat2 --- true cat3 instanceof Cat2 --- --- true --- --- --- 构造函数模式的问题 --- --- cat4 : name=mao4, color=red, type=猫科动物 吃老鼠 cat5 : name=mao5, color=pink, type=猫科动物 吃老鼠 cat4.type == cat5.type --- --- true cat4.eat == cat5.eat() --- --- false --- --- --- Prototype模式 --- --- cat6 : name=mao6, color=green, type=猫科动物 吃老鼠 cat7 : name=mao7, color=gray, type=猫科动物 吃老鼠 cat6.type == cat7.type --- --- true cat6.eat == cat7.eat --- --- - true --- --- --- Prototype模式的验证方法 --- --- Cat4.prototype.isPrototypeOf(cat6) --- true Cat4.prototype.isPrototypeOf(cat5) --- false cat6.hasOwnProperty("name") --- --- true cat6.hasOwnProperty("type") --- --- false "name" in cat7 --- ---true "colr" in cat7 --- ---false cat7[name] = mao7 cat7[color] = gray cat7[type] = 猫科动物 cat7[eat] = function () { print("\u5403\u8001\u9f20"); }
javascript --- 面向对象 --- 封装的更多相关文章
- Javascript面向对象(封装、继承)
Javascript 面向对象编程(一):封装 作者:阮一峰 Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程( ...
- JavaScript面向对象--封装
一.封装的概念 面向对象的类包括两大成员,一种是暴露给外部的接口,另一种是只在类内部才能访问的私有属性.在这个类被实例化成对象后,用户只能通过操作给定的接口来访问该类内部的私有属性,这就被称为面向对象 ...
- Javascript面向对象特性实现封装、继承、接口详细案例——进级高手篇
Javascript面向对象特性实现(封装.继承.接口) Javascript作为弱类型语言,和Java.php等服务端脚本语言相比,拥有极强的灵活性.对于小型的web需求,在编写javascript ...
- javascript面向对象(一):封装
本文来自阮一峰 学习Javascript,最难的地方是什么? 我觉得,Object(对象)最难.因为Javascript的Object模型很独特,和其他语言都不一样,初学者不容易掌握. 下面就是我的学 ...
- 【转】Javascript 面向对象编程(一):封装
原文链接:http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html Javascript ...
- Javascript 面向对象编程(一):封装 by 阮一峰
<Javascript高级程序设计(第二版)>(Professional JavaScript for Web Developers, 2nd Edition) 它们都是非常优秀的Java ...
- JavaScript面向对象轻松入门之封装(demo by ES5、ES6、TypeScript)
本章默认大家已经看过作者的前一篇文章 <JavaScript面向对象轻松入门之抽象> 为什么要封装? 封装(Encapsulation)就是把对象的内部属性和方法隐藏起来,外部代码访问该对 ...
- Javascript 面向对象编程—封装
前 言 Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class(类) ...
- Javascript 面向对象编程—继承和封装
前 言 Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class(类) ...
随机推荐
- iOS:授权用户定位NSLocationManager的使用
请求用户批准定位: 在iOS8,要想获得用户的位置,必须经过用户批准授权 开发者可以在Info.plist中添加两个配置项 –NSLocationAlwaysUsageDescription –NSL ...
- Mac 版 QQ 可直接访问 iPhone 的相册 ?!
在QQ的聊天窗口中,点击 发送图片 的按钮,会有两个选择项,其中一个就是 从iPhone相册中选取 ,如图 点击 从iPhone相册中选取 后,iPhone上的QQ会收到一条消息 “请选择要上传的照 ...
- poj-3616 Milking Time (区间dp)
http://poj.org/problem?id=3616 bessie是一头工作很努力的奶牛,她很关心自己的产奶量,所以在她安排接下来的n个小时以尽可能提高自己的产奶量. 现在有m个产奶时间,每个 ...
- 导出到Excel并且取消默认的科学计算法
导出Excel的代码很多,其中这种最简单: protected void btnDCAll_Click(object sender, EventArgs e) { ...
- golang 常用网址收藏
1:beego 模板语法指南:http://blog.go-china.org/03-beego-template 2:go 语言sublimetext2配置:http://www.kankanews ...
- Android activity 周期图
- UVa 1609 (博弈) Foul Play
姑且把它归类为一道博弈吧,毕竟这也是在找必胜方案. 十分有意思的一道题目,设计一种方案让你支持的1队获胜. 题目给出了两个很重要的条件: 1队能打败至少一半的队伍 对于1队不能打败的黑队,一定存在一个 ...
- POJ 3287 (基础BFS) Catch That Cow
这是做的第一道BFS,很基础很简单的题目 广度优先搜索算法如下:(用QUEUE)(1) 把初始节点S0放入Open表中:(2) 如果Open表为空,则问题无解,失败退出:(3) 把Open表的第一个节 ...
- 02.C语言关于指针的学习笔记
指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址. 要搞清一个指针需要搞清指针的四方面的内容: 指针的类型,指针所指向的 类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内 ...
- BZOJ 1589 采集糖果
23333怎么调了一晚上.... #include<iostream> #include<cstdio> #include<cstring> #include< ...