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(类) ...
随机推荐
- android sqlite 怎么写入存储时间
字符串类型2013-12-10 12:12:12 SimpleDateFormat formatter = new SimpleDateFormat ("yyyy-MM-dd"); ...
- 【推荐】《Netty in action》书籍
最近准备开始阅读一下<Netty in action>并且准备构架设计一个分布式系统.用于新项目. 貌似压力很大啊.压力就是东西.希望自己能够调节好. Netty in action是Ne ...
- spring+mybati java config配置引起的bean相互引用日志报警告问题
摘要: Error creating bean with name 'XXX': Requested bean is currently in creation: Is there an unreso ...
- code manager tools git的使用;
git的使用 一.下载及安装: 1.下载:https://github.com 2.安装: 二.常用命令: 查看.添加.提交.删除.找回,重置修改文件 git help< command> ...
- Android 动画 setVisibility 后出错解决方法
===先说明下背景. 写的是个ListView 设置 adapter,并在列表末尾显示加载更多,点击 加载更多 时, 变成一个 圆环形的加载动画和 正在加载. 说明下,这个 加载动画是自己做得,一个圆 ...
- Passing JavaScript Objects to Managed Code
Silverlight If the target managed property or input parameter is strongly typed (that is, not typed ...
- 【Cocosd2d实例教程二】地图编辑器Tiled的安装使用
(转载请注明出处:http://blog.csdn.net/buptgshengod) 我们知道cocos2d是一个基于2d效果的游戏引擎,那么如果制作一个2d手机游戏我们需要创建相应的游戏画面,而c ...
- C++ STL 中erase()的使用需要小心
C++ STL极大的方便了用户编写程序,但是同时一不小心也会犯一些错误,如erase()造成迭代器失效经常会引起错误. 错误示例: std::list< int> List; std::l ...
- Android Studio 配置使用百度api (附带简单样例)
还是和同学开发的那个课程作业项目的app, 要使用到百度地图的api 但是,官方文档貌似只有Eclipse的例子,对Android Studio似乎没有说明. 难道,是因为后者是 "Doo ...
- You must SET PASSWORD before executing this statement解决
[转载] MySql5.6操作时报错:You must SET PASSWORD before executing this statement解决 转载: http://blog.csdn.net/ ...