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(类) ...
随机推荐
- sqlite数据库查询批量
采网页里的网址,网址每天都变化,而数据库里有几千条数据,通过 select count(*) 来查找数据库里有没有该网址,没有的话就采集入库,所 以如果网页当天更新1千条连接,那采集一次就要selec ...
- Myeclipse 2014 javascript 添加 jquery 代码提示
近日在写js,在myeclipse中没有jquery代码的提示着实不方便,在网上使用度娘搜索添加提示方式,试了多种,现经测试以下方式可取. 1.打开help菜单下的install from site. ...
- PHP dirname() 返回路径中的目录部分basename() 函数返回路径中的文件名部分。
dirname (PHP 4, PHP 5) dirname — 返回路径中的目录部分说明string dirname ( string $path ) 给出一个包含有指向一个文件的全路径的字符串,本 ...
- SQL 随笔
自动生成10位ID DECLARE @num INT ) )) ) Date的运算 DECLARE @StartDate DATETIME , GetDate()) --add day PRINT @ ...
- Diving Into Lync Client Logins
Now that we have a fully functional UC lab it's time to start using the lab to explore various aspec ...
- php关于static关键字
静态属性与方法可以在不实例化类的情况下调用,直接使用类名::方法名的方式进行调用.静态属性不允许对象使用->操作符调用.静态方法中,$this伪变量不允许使用.可以使用self,parent,s ...
- hdu4427Math Magic
4427 dp[i][j][k] i为K位的最小公倍数 j为k位的和 k以滚动数组的形式 这题最棒的是 有一个强有力的剪枝 组成公倍数m的肯定都是M的质因子 这样1000里面最多就30多个 复杂度可过 ...
- Home Server
今天分享一个作品--HomeServer,一个基于云存储理念的集家庭数据存储.共享.管理及远程访问为一体的家用存储设备.通俗的讲,就是一个家庭数据银行,为家庭的数据提供专业.安全.便捷.持久.全天候的 ...
- UVa 821 Page Hopping【Floyd】
题意:给出一个n个点的有向图,任意两个点之间都相互到达,求任意两点间最短距离的平均值 因为n很小,所以可以用floyd 建立出图,然后用floyd,统计d[][]不为0且不为INF的边的和及条数,就可 ...
- HDU 1372 Knight Moves【BFS】
题意:给出8*8的棋盘,给出起点和终点,问最少走几步到达终点. 因为骑士的走法和马的走法是一样的,走日字形(四个象限的横竖的日字形) 另外字母转换成坐标的时候仔细一点(因为这个WA了两次---@_@) ...