<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>js高级语法3-原型模式 </title>
</head>
<body>
<script>
/*
javascript原型模式(prototype):
1. 原型是一个对象,其他对象可以通过它实现属性的继承,所有的对象在默认的情况下都有一个原型。
因为原型的本身也是对象。所以一个类的真正原型是被类的内部的prototype属性所持有。
2.什么可以称之为对象?
在javascript中,一个对象就是任何的无序的键值对的集合。
如果他不是一个主数据类型(undefined,null,boolean,number,string)
其他的通通叫做对象
*/ /*
javascript中的原型是和函数紧密连接的;
var o ={} 他不是用function定义的,他有原型吗?
有。
每个通过函数和new操作符生成出来的对象都持有一个属性 __proto__,这个属性
保存了创建他的构造函数的prototype的原型引用。
* */
/*
function Person(){} // 定义一个空对象
Person.prototype.name="张三";
Person.prototype.showName=function(){
//这个this表示调用本函数的一个具体实例化的类
alert(this.name);
}
new Person().showName(); var cat = {};
// cat.prototype.name="112";//报错,prototype未定义
//默认隐藏的调用下面的代码:
Object.getPrototypeOf(cat).name="zhangdan"; //这是获取隐藏原型的方法,浏览器支持度不好
cat.__proto__.master = "javascript";
//上边两个是显式调用,下面是隐式调用,作用是一样的
cat.age=2;
cat['sex']="man"; alert(cat.name+" "+cat.master+" "+cat.age+" "+cat["sex"]);
*/
//利用原型模式实现简单继承
function per(){
this.getName = function(str){
alert(str);
}
}
per.prototype.getAge = function(age){
alert(age);
}
//不完全继承
var a = {};//空类
a.__proto__ = per.prototype;
//把要被继承的原型引用,赋值给要继承的类,相当于一个挂载
//如果要继承的类是一个空类,那么就会完全继承
a.getAge(3);
//a.getName("张丹"); //这个方法 报错,因为继承的是原型,也就是上一级的所有东西,
//但是不包括被继承类自身定义的属性和方法 //简单方式实现继承(js中无法实现多继承)
//完全继承
var b = {};
b.__proto__ = new per();
b.__proto__.constructor = b;
b.getAge(9);
b.getName("xiaowang"); //串联继承
function m(){
this.showM = function(){
alert("I am is M ")
}
}
function n(){
this.showN = function(){
alert("I am is N ")
}
} function k(){};
n.prototype = new m();
n.prototype.constructor = n; k.prototype = new n();
k.prototype.constructor = k;
var boo = new k();
boo.showM();
boo.showN();
</script>
</body>
</html>

JavaScript设计模式-3.原型模式的更多相关文章

  1. 再起航,我的学习笔记之JavaScript设计模式09(原型模式)

    我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 我们 ...

  2. JavaScript设计模式 (1) 原型模式

    原型模式(Prototype):用原型实例指向创建类对象,使用于创建新对象的类共享原型对象的属性以及方法. //图片轮播类 var LoopImages = function (imgArr, con ...

  3. Javascript设计模式之原型模式、发布订阅模式

    原型模式 原型模式用于在创建对象时,通过共享某个对象原型的属性和方法,从而达到提高性能.降低内存占用.代码复用的效果. 示例一 function Person(name) { this.name = ...

  4. JavaScript设计模式之----组合模式

    javascript设计模式之组合模式 介绍 组合模式是一种专门为创建Web上的动态用户界面而量身制定的模式.使用这种模式可以用一条命令在多个对象上激发复杂的或递归的行为.这可以简化粘合性代码,使其更 ...

  5. 设计模式_11_原型模式(prototype)深拷贝、浅拷贝

    设计模式_11_原型模式(prototype) 浅拷贝: package designPatternOf23; /** * 定义:用原型实例,指定创建对象的种类,并通过拷贝这些原型创建新的对象 * P ...

  6. C#设计模式(6)——原型模式(Prototype Pattern)

    一.引言 在软件系统中,当创建一个类的实例的过程很昂贵或很复杂,并且我们需要创建多个这样类的实例时,如果我们用new操作符去创建这样的类实例,这未免会增加创建类的复杂度和耗费更多的内存空间,因为这样在 ...

  7. 乐在其中设计模式(C#) - 原型模式(Prototype Pattern)

    原文:乐在其中设计模式(C#) - 原型模式(Prototype Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 原型模式(Prototype Pattern) 作者:weba ...

  8. js原生设计模式——7原型模式之真正的原型模式——对象复制封装

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  9. C#设计模式之六原型模式(Prototype)【创建型】

    一.引言 在开始今天的文章之前先说明一点,欢迎大家来指正.很多人说原型设计模式会节省机器内存,他们说是拷贝出来的对象,这些对象其实都是原型的复制,不会使用内存.我认为这是不对的,因为拷贝出来的每一个对 ...

随机推荐

  1. Java反射API研究(4)——Class中的重要对象

    一.Constructor与Method的父类:Executable Executable表示一个可执行类,构造方法与普通方法都是Executable AnnotatedType[] getAnnot ...

  2. mysql server 自动断开的问题

    今天发现mysql的一个问题,当跑update语句的时候,mysql 服务会自动断掉,无论用 phpmyadmin, navicat , mysql workbench 甚至用 mysql命令行效果一 ...

  3. 如何修改TFS 2013中工作项附件大小限制

    默认情况下,TFS工作项的附件大小限制为4MB.我们可以通过调用TFS提供的Web Service将这个限制调整最高到2GB. 调整这个设置的必备条件是你需要拥有TFS应用层管理员的权限.下面来看看如 ...

  4. 在TFS 2013的敏捷组合管理中添加积压工作

    在TFS提供的三套默认模板中,组合管理(Portfolio Management)只包含功能(Feature)和要求这个两个积压工作.你可以参考下面的文档,学会如何在积压工作中添加额外的工作项类型. ...

  5. 【VS2015】故障修复之dep6100,dep6200

    问题描述:把uwp程序往手机上(或者往模拟器上)部署时,vs ide提示我错误信息dep6100和dep6200,报告说“连接不到设备”. 这可把我愁坏了,各种方法都不行,最后发现问题出在Hyper- ...

  6. 比特币的TxHash为什么会发生改变

    比特币中TxHash为什么会变化? 一直不理解比特币的Tx在被打包确认之前TxHash为什么会发生变化,这次终于找到了依据. 交易可延展性 虽然交易签名后,签名当前不会覆盖经过哈希处理以创建事务哈希的 ...

  7. python中的列表和元组

    1. 什么是列表 定义: 能装对象的对象 在python中使用[]来描述列表, 内部元素用逗号隔开. 对数据类型没有要求,列表存在索引和切片. 和字符串是一样的. 2.相关的增删改查操作 切片 列表和 ...

  8. Exp5 MSF基础应用 20164323段钊阳

    网络对抗技术 20164323 Exp5 MSF基础应用 靶机 ip:192.168.1.229 kali ip:192.168.1.216 exploit选取 主动攻击:ms17_010_psexe ...

  9. abstract方法必须在abstract类中 这句话是对的还是错的?

    对 参考文章:https://zhidao.baidu.com/question/435526297.html interface中所有的方法都是抽象的,抽象类中部分方法是抽象的 实现interfac ...

  10. 【bug】—— IE8 ajax 报错:no transport

    如题,我使用$.ajax()方法请求数据,在现代浏览器中工作正常,但在 IE 8 下,会有报错:no transport 从 stackoverflow 中获知,出现这个问题是因为** IE 8 不支 ...