JavaScript ----------------- 原型式继承
思想:借助原型可以基于已有的对象创建新对象,同时还不必因此创建自定义类型。为了达到这个目的,看看下面的实现方式
function object(o){
function F(){
}
F.prototype=O;
return new F();
};
在上面的代码段中主要做了哪些事情尼?
创建了一个临时的构造函数,同时把传入参数作为临时构造函数的原型,最后返回一个临时构造函数的实例;从本质上来讲,object 对传入其中的对象执行了一次浅复制;
//看实例:
function object(o){
function F(){ }
F.prototype=o;
return new F();
}; //在上面中 var person={
name:"Nicholas",
friends:["Shelby","Court","Van"]
} var person1 = object(person);
person1.name = "Greg";
person1.friends.push("Rob"); var person2 = object(person);
person2.name = "Linda";
person2.friends.push("Barbie"); alert(person.friends); // Shelby Court Van Greg Rob
对于这种继承方式必须依赖于存在一个对象作为另一个对象的基础。如果有这么一个对象的话,可以把它传递给object()函数,然后再根据具体需求对得到的对象加已修改即可。
实例从结果可以看出,person1与person2 就是person对象的副本。
ECMAScript5中通过新增Object.create() 方法规范化了原型式继承。这个方法接收两个参,当只传一个参数的时候与object()行为相同。
@param1 接收一个对象
@param2 可选 接受一个为新对象定义的额外属性的对象,类似 Object.defineProperties()方法的参数格式相同:每个属性都是通过自己的描述符定义的;已这种方式创建属性都会覆盖原型上的同名属性。
Object.create()
var person={
name:"Nicholas",
friends:["Shelby","Court","Van"]
}
var person1 = Object.create(person,{
name:{
value:"Greg"
}
});
person1.name; // Greg
var person={
name:"Nicholas",
friends:["Shelby","Court","Van"]
}
var person1 = Object.create(person,{
name:{
value:"Greg",
enumerable:false
}
});
name in person1; // false
综合上一篇的组合继承,在没有必要创建构造函数,而指想让一个对象与另一个对象保持类似的情况下,原型式继承是完全可以胜任的。不过别忘了,包含引用类型值得属性始终都会共享相应的值,就像使用原型模式一样。
JavaScript ----------------- 原型式继承的更多相关文章
- 理解JavaScript原型式继承
0.基础 javascript没有类的概念, javascript不需要实例化某个具体类的实例.javascript对象本身可以用来创建对象, 而对象可以继承自其他对象, 这个概念称为原型式继承 每个 ...
- js原生继承之——原型式继承实例
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- JavaScript中的类式继承和原型式继承
最近在看<JavaScript设计模式>这本书,虽然内容比较晦涩,但是细品才发现此书内容的强大.刚看完第四章--继承,来做下笔记. 书中介绍了三种继承方式,类式继承.原型式继承和掺元类继承 ...
- JavaScript继承基础讲解,原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承
说好的讲解JavaScript继承,可是迟迟到现在讲解.废话不多说,直接进入正题. 既然你想了解继承,证明你对JavaScript面向对象已经有一定的了解,如还有什么不理解的可以参考<面向对象J ...
- javascript中类式继承和原型式继承的实现方法和区别
在所有面向对象的编程中,继承是一个重要的话题.一般说来,在设计类的时候,我们希望能减少重复性的代码,并且尽量弱化对象间的耦合(让一个类继承另一个类可能会导致二者产生强耦合).关于“解耦”是程序设计中另 ...
- JavaScript之面向对象学九(原型式继承和寄生式继承)
一.原型式继承 该继承模式是由道格拉斯*克罗克福德在2006年提出的实现继承的方法. 模式的基本思路:借助原型可以基于已有的对象创建新的对象,同时还不必因此创建自定义类型. 代码如下: functio ...
- Javascript继承4:洁净的继承者----原型式继承
//原型式继承 function inheritObj(obj){ //声明一个过渡函数对象 function F(){} //过渡对象的原型继承父对象 F.prototype = obj; //返回 ...
- javascript学习笔记--经典继承、组合继承、原型式继承、寄生继承以及寄生组合继承
经典继承 js中实现经典继承的方式是通过构造函数来实现的,即在子类中对父类调用call方法. function Geometric() { this.time = ""; this ...
- [js高手之路]原型式继承与寄生式继承
一.原型式继承本质其实就是个浅拷贝,以一个对象为模板复制出新的对象 function object( o ){ var G = function(){}; G.prototype = o; retur ...
随机推荐
- 今天上传公司服务器出现的.net framework版本错误问题
今天做好一个网站(.net4.0),里面有静态页面也有aspx页面,发布后,满心欢喜的上传到服务器,运行后,静态页没有问题,可是通过导航栏一旦点击进入aspx页面,就会出现错误 ,提示web.conf ...
- Gson 简易笔记
#Gson 简易笔记 之前用 fastjson.它连个规矩的文档都没有,而且在github的wiki上写着: gson的g可能是"龟"拼音的缩写,龟速的json库." 各 ...
- 从配置文件中读取数据获取Connection
配置文件 db.driver=com.mysql.jdbc.Driver db.url=jdbc\:mysql\://localhost\:3306/mybase db.user=root db.ps ...
- CSS Hacks 总结
CSS hack由于不同的浏览器,对CSS的解析认识不一样,因此会导致生成的页面效果不一样,我们就需要针对不同的浏览器去写不同的CSS,让他能在不同的浏览器中也能得到我们想要的页面效果. CSS ha ...
- [Mugeda HTML5技术教程之12]制作跨屏互动应用
mugeda动画平台还可以用来制作跨屏互动的动画应用,比如在PC端的大屏幕上显示动画的主界面,同时会显示出供手机扫描的二维码,手机扫描后会在手机上显示手机端动画界面.通过手机就可以和PC端的显示界面跨 ...
- [转发]Gulp开发教程(翻译)
Building With Gulp =================== 转载出处 原文地址 翻译出处 对网站资源进行优化,并使用不同浏览器测试并不是网站设计过程中最有意思的部分,但是这个过程中的 ...
- LoadRunner参数化功能详解
更新方式: . Each Occurrence 每次遇到参数就进行更新. 多次使用同一参数,而且没有什么关联,例如随机数. Each Iteration 每次迭代时发生更新. 如果参数出现几 ...
- Bootstrap 实例 - 模态框(Modal)插件
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- nginx和tomcat的响应时间
1.request_time 官网描述:request processing time in seconds with a milliseconds resolution; time elapsed ...
- OpenWRT 编译 error GNU libiconv not in use but included iconv.h is from...
OpenWRT 编译 error GNU libiconv not in use but included iconv.h is from... 编译的时候碰到一个常见的错误,但是却在一个陌生的地方爆 ...