- 浏览: 108063 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
墨子宇:
so,为了使用JSLint我还得装一个aptana?
eclipse 添加 JSLint 插件 -
lvjun106:
楼主可以看下这篇文章,介绍的很详细。http://www.os ...
eclipse 添加 JSLint 插件 -
newsletterBroker:
呵呵,感觉不错!
Jquery 源码中的 正则表达式 分析 -
jayliud:
String.prototype.count = funct ...
百度web前端笔试
原文地址:http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html
封装:
所谓"构造函数",其实就是一个普通函数,但是内部使用了this变量。
对构造函数使用new运算符,就能生成实例,并且this变量会绑定在实例对象上。
Javascript规定,每一个构造函数都有一个prototype属性,指向另一个对象。
这个对象的所有属性和方法,都会被构造函数的实例继承。
这意味着,我们可以把那些不变的属性和方法,直接定义在prototype对象上。
Prototype模式的验证方法:
isPrototypeOf() :这个方法用来判断,某个proptotype对象和某个实例之间的关系。
hasOwnProperty():每个实例对象都有一个hasOwnProperty()方法,
用来判断某一个属性到底是本地属性,还是继承自prototype对象的属性。
in运算符 : in运算符可以用来判断,某个实例是否含有某个属性,不管是不是本地属性。
in运算符还可以用来遍历某个对象的所有属性。
原文地址:http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_inheritance.html
继承:
function Animal(){
this.species = "动物";
}
function Cat(name,color){
this.name = name;
this.color = color;
}
1. 构造函数绑定:最简单的方法,大概就是使用call或apply方法,将父对象的构造函数绑定在子对象上,也就是在子对象构造函数中加一行
function Cat(name,color){
Animal.apply(this, arguments);
this.name = name;
this.color = color;
}
var cat1 = new Cat("大毛","黄色");
alert(cat1.species); // 动物
2.prototype模式
Cat.prototype = new Animal();
Cat.prototype.constructor = Cat;
var cat1 = new Cat("大毛","黄色");
alert(cat1.species); // 动物
3. 直接继承prototype
function Animal(){ }
Animal.prototype.species = "动物";
Cat.prototype = Animal.prototype;
Cat.prototype.constructor = Cat;
var cat1 = new Cat("大毛","黄色");
alert(cat1.species); // 动物
4. 利用空对象作为中介
var F = function(){};
F.prototype = Animal.prototype;
Cat.prototype = new F();
Cat.prototype.constructor = Cat;
5. prototype模式的封装函数
function extend(Child, Parent) {
var F = function(){};
F.prototype = Parent.prototype;
Child.prototype = new F();
Child.prototype.constructor = Child;
Child.uber = Parent.prototype;
}
函数体最后一行:意思是为子对象设一个uber属性,这个属性直接指向父对象的prototype属性。
这等于是在子对象上打开一条通道,可以直接调用父对象的方法。
这一行放在这里,只是为了实现继承的完备性,纯属备用性质。
6. 拷贝继承
function Animal(){}
Animal.prototype.species = "动物";
function extend2(Child, Parent) {
var p = Parent.prototype;
var c = Child.prototype;
for (var i in p) {
c[i] = p[i];
}
c.uber = p;
}
//调用
extend2(Cat, Animal);
var cat1 = new Cat("大毛","黄色");
alert(cat1.species); // 动物
非构造函数的继承:http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_inheritance_continued.html
1、什么是"非构造函数"的继承?
var Chinese = {
nation:'中国'
};
var Doctor ={
career:'医生'
}
这里要注意,这两个对象都是普通对象,不是构造函数,无法使用构造函数方法实现"继承"
2、object()方法
function object(o) {
function F() {}
F.prototype = o;
return new F();
}
//调用
var Doctor = object(Chinese);
Doctor.career = '医生';
3、浅拷贝:除了使用"prototype链"以外,还有另一种思路:把父对象的属性,全部拷贝给子对象,也能实现继承。
function extendCopy(p) {
var c = {};
for (var i in p) {
c[i] = p[i];
}
c.uber = p;
return c;
}
//调用
var Doctor = extendCopy(Chinese);
Doctor.career = '医生';
alert(Doctor.nation); // 中国
4、深拷贝
function deepCopy(p, c) {
var c = c || {};
for (var i in p) {
if (typeof p[i] === 'object') {
c[i] = (p[i].constructor === Array) ? [] : {};
deepCopy(p[i], c[i]);
} else {
c[i] = p[i];
}
}
return c;
}
//调用
var Doctor = deepCopy(Chinese);
Chinese.birthPlaces = ['北京','上海','香港'];
Doctor.birthPlaces.push('厦门');
alert(Doctor.birthPlaces); //北京, 上海, 香港, 厦门
alert(Chinese.birthPlaces); //北京, 上海, 香港
//说明
目前,jQuery库使用的就是这种继承方法。
- javascript.zip (1.8 KB)
- 下载次数: 3
发表评论
-
execCommand
2011-11-25 16:12 1068mozilla 文档地址:https://develop ... -
javascript DOM
2011-11-21 10:50 985原文地址: http://blog.mo ... -
支持ctrl,shift键的拖拽排序
2011-08-26 11:23 1128终于搞定了,太不容易了。最近公司要弄一个拖拽排序的 ... -
javascript 中的闭包
2011-08-16 16:37 876文章地址:http://www.ruanyifeng.com/ ... -
javascript 排序
2011-08-31 19:41 874//生成20-100之间的20个随 ... -
seajs 源码 学习 1
2011-08-10 17:32 0global.seajs = { _seajs: this ... -
seajs 源代码 学习
2011-08-11 14:08 3161这段时间学习了一下seajs,也用了seajs写了不少的d ... -
null 和 undefined
2011-07-31 15:05 838原文地址:http://blog.csdn.net/aimin ... -
辩:javascript 的数据类型
2011-07-29 11:18 1143关于“javascript 的数据 ... -
跨域请求
2011-07-12 11:34 0原文地址:http://itgeeker. ... -
uglifyJS
2011-04-26 12:21 0-b or --beautify — o ... -
JavaScript DO 框架 学习
2011-04-22 14:56 1727昨天在github找东西的时候,发现上了克军的DO框架,感觉不 ... -
prettfy demo
2011-02-23 08:29 1160<!DOCTYPE html PUBLIC " ... -
JavaScript 测试题
2011-02-16 12:07 1032console.log(" ... -
javascript 中的apply和call方法
2010-12-31 15:11 733一直以来不明白,今天算是搞明白了apply和call方法了。记 ... -
jquery 插件 开发 模板
2010-12-10 13:09 920原文来自网上。 (function($) { ... -
31个最实用的Javascript工具
2010-12-08 14:56 1031原文地址:http://developer.51cto.com ... -
27个必备的Javascript开发工具
2010-12-01 14:59 978原文地址:http://blog.mcncc.com/4275 ... -
选择器 效率 图
2010-11-22 11:27 680以后用jquery的选择器这回有依据了 -
YQL介绍---很强大啊
2010-11-22 10:52 1471原文地址:http://www.aliue ...
相关推荐
javascript中如何实现封装,继承和多态
javascript中如何实现封装,继承和多态,并有详细,我天天在传谢谢
写或读JS代码的时候总有些地方感觉模模糊糊的,于是花了点时间在网上找并稍微整理了一下
在JavaScript中继承是一个非常复杂的话题,比其他任何面向对象的语言中的继承都复杂得多。在大多数其他面向对象语言中,继承一个类只需使用一个关键字即可。与它们不同,在JavaScript中要想达到传承公用成员的目的,...
笔者历经多年javascript的开发,痛彻体会javascript面向对象编程的不便性,精心制作了一个类的定义与继承功能的js,实现了在javascript中对类的定义、继承、封装机制,主要功能特征包括: 一、 统一了类定义的语法...
JAVA面向对象基础测试题-继承-封装-多态等测试题.docx
简洁理解JavaScript中的封装与继承特性_.docx
Javascript面向对象特性实现(封装、继承、接口 Javascript面向对象特性实现(封装、继承、接口
Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象。但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class(类)。
我们还知道,面向对象编程有三个重要的概念 - 封装、继承和多态。 但是在JavaScript的世界中,所有的这一切特性似乎都不存在。 因为JavaScript本身不是面向对象的语言,而是基于对象的语言。
主要介绍了JavaScript使用prototype原型实现的封装继承多态,涉及javascript prototype与面向对象程序设计相关操作技巧,需要的朋友可以参考下
javascript中如何实现封装,继承和多态,并有详细的示例.ppt
继承的封装貌似在每个语言中都有,在本文为大家详细介绍下,JavaScript的继承的封装,感兴趣的朋友不要错过
主要介绍了JavaScript 继承 封装 多态实现及原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要介绍了JavaScript中的封装与继承特性,封装与继承是基于对象编程概念中的基本特性,需要的朋友可以参考下
整理一下js面向对象中的封装和继承。 1.封装 js中封装有很多种实现方式,这里列出常用的几种。 1.1 原始模式生成对象 直接将我们的成员写入对象中,用函数返回。 缺点:很难看出是一个模式出来的实例。 代码: ...
既然是面向对象的,那就有面向对象的三大特征:封装、继承、多态。这里讲的是JavaScript的继承,其他两个容后再讲。 JavaScript的继承和C++的继承不大一样,C++的继承是基于类的,而JavaScript的继承是基于原型的。 ...
在上文中,我利用prototype的原理做了一个封装的New,然后我就想到,我是否可以用prototype的原理进一步封装面向对象的一些基本特征呢?比如继承。