大家都知道,在js原型继承中,不赞成直接用Obj__ proto __ 去改变一个原型
__ proto __ 低版本IE 无法使用
其实Objectcreate()也可以起到原型继承的作用
Objectcreate(obj_proto , prototObject) 是在 ES5中提出的一种新的对象创建方式
它一共有两个参数,
第一个参数: 新创建对象的原型
第二个参数; 一组参数对象的属性和值,一般不用写
先上一个 __ proto__继承的demo:
这就是一个简单的原型继承,起初anther_student不存在 run() 这个方法,但是
这句话将anther_student的原型指向了student , anther_student在 student 上继承了run()方法 ,
原型继承我们也可以用Objectcreate()实现
Objectcreate() 方法可以传入一个原型对象,并且创建一个基于该原型的新对象
来个Objectcreate() 小demo
这样,Objectcreate() 就实现了一个简单的原型继承
2.原型法(prototyping)
(1)原型法定义
原型法是指在获取一组基本的需求定义后,利用高级软件工具可视化的开发环境,快速地建立一个目标系统的最初版本,并把它交给用户试用、补充和修改,再进行新的版本开发。反复进行这个过程,直到得出系统的“精确解”,即用户满意为止。经过这样一个反复补充和修改过程,应用系统 “最初版本”就逐步演变为系统 “最终版本”。
原型法就是不断地运行系统“原型”来进行启发、揭示、判断、修改和完善的系统开发方法。
(2)原型(prototype)
原型(prototype)即样品、模型的意思。把系统主要功能和接口通过快速开发制作为“软件样机”,以可视化的形式展现给用户,及时征求用户意见,从而明确无误地确定用户需求。同时,原型也可用于征求内部意见,作为分析和设计的接口之一,可方便于沟通。
对原型的基本要求包括:体现主要的功能;提供基本的界面风格;展示比较模糊的部分以便于确认或进一步明确;原型是可运行的,至少在各主要功能模块之间能够建立相互连接。
原型可以分为三类:
① 淘汰(抛弃)式(disposable):目的达到即被抛弃,原型不作为最终产品。
② 演化式(evolutionary):系统的形成和发展是逐步完成的,它是高度动态迭代和高度动态的循环,每次迭代都要对系统重新进行规格说明、重新设计、重新实现和重新评价,所以是对付变化最为有效的方法。
③ 增量式(incremental):系统是一次一段地增量构造,与演化式原型的区别在于增量式开发是在软件总体设计基础上进行的。很显然,其应付变化的能力比演化式差。
在信息系统设计的过程中,常用的各种不同形式的部分原型有:
① 对话原型
原型模拟预期的终端交互,使用户可以从屏幕上查看他们将接收什么、进行的 *** 作,并提出遗漏之处,从而加深正确的理解。终端对话的设计效果直接影响着系统的可用性和用户对系统的接受程度。
② 数据输入原型
建立数据输入的原型,可以检查数据的输入速度和正确性,还能进行有效性和完整性的检查。
③ 报表系统原型
提供给用户的各种报告应在整个系统实现之前给用户看,报表子系统需要经常进行大量修改以满足系统的需要,因此,可以把报表生成器作为原型。
④ 数据系统原型
首先生成一个含有少量记录的原型数据库,这样用户和分析员与它可以进行交互,生成报表和显示有用信息。这种交互经常导致产生对不同的数据类型、新的数据域或不同的数据组织方式的需求,还可以在原型化工具的帮助下探索用户将如何使用信息以及数据库是什么样的。
⑤ 计算和逻辑原型
有时一个应用逻辑或计算是复杂的。审计员、工程师、投资分析员和其他用户可以使用高级程序设计语言建立他们所需的计算实例。这些实例可以组合在一起构成一个大的系统,与其它应用系统、数据库或终端相连接,用户可以使用这些计算原型检验他们所求结果的准确性。
⑥ 应用程序包原型
在一个应用程序包和其它应用系统相连或实际使用之前,可以通过一个小组用户来鉴定这个应用程序包是否令他们满意,若不满意可以进行大量的修改,直到令他们满意。
⑦ 概念原型
有时,一个应用概念不能被正确全面地理解,这是信息系统设计中存在的问题。在花费大额经费来建立这个系统之前,需要进行测试和细化。可以用一个快速实现的数据管理系统来测试,使用标准的数据输入屏幕和标准的报表格式,以减少测试和细化其概念的工作量。在测试和细化之后,对概念有了明确的理解,再进行建立该应用的特定报表和屏幕等细节工作。
(3)原型法意义
原型法意义是可视化,强化沟通,降低风险,节省后期变更成本,提高项目成功率。一般来说,采用原型法后可以改进需求质量;虽然投入了较多先期的时间,但可以显著减少后期变更的时间;原型法投入的人力成本代价并不大,但可以节省后期成本;对于较大型的软件来说,原型系统可以成为开发团队的蓝图;另外,原型通过充分和客户交流,还可以提高客户满意度。
原型法是在计算机技术发展到一定阶段,用户应用需求高涨的情况下发展的一种方法论,但它同时又是对开发人员有高要求的一种方法论。
利用原型链来实现继承,父类的一个实例作为子类的原型
原理: 子类的原型对象 指向 父类的实例 , 当 子类实例 找不到属性和方法时,会沿着原型链往上找。
优点:简单,既是子类实例也是父类实例,父类新加原型方法或者属性,子类都能访问到
缺点:
通过使用call、apply方法可以在新创建的对象上执行构造函数,用父类的构造函数来增加子类的实例
原理: 子类的构造函数中执行父类的构造函数,并且改变子类的this绑定
优点:简单,直接父类的属性和方法
缺点:无法继承原型链上的属性方法
将父类原型对象直接赋值给子类的构造函数,再将空属性的构造函数实例赋值给子类原型对象
优点:完美实现继承,解决了组合式继承带两份属性的问题; new Child的时候不用 每次都 new Parent
缺点: 子类的prototype添加方法会影响 父类的prototype;
将父类原型对象直接赋值给子类的构造函数,再将空属性的构造函数实例赋值给子类原型对象
优点:完美实现继承,解决了组合式继承带两份属性的问题; new Child的时候不用 每次都 new Parent
将等待继承的原型对象克隆,再赋值给继承的原型对象
优点:直接通过对象生成一个继承该对象的对象
缺点:不是类式继承,而是原型式基础,缺少了类的概念
参考: >
在ES6之前,对象不是通过类创建的,而是用构造函数的特殊函数来定义。
创建对象可以通过以下三种方式:
构造函数是一种特殊的函数,主要用来初始化对象,即为对象成员变量赋初始值,它总与new 一起使用。我们可以把对象中一些公共的属性和方法抽取出来,然后封装到一个函数里面。
普通函数
如果没有设置return,调用时则返回undefined
构造函数
不需要设置return,实例时默认返回该对象
构造函数通过原型定义的函数是所有实例对象共享的
JavaScript规定,每一个构造函数都有一个prototype属性,指向另一个对象,这个对象的所有方法和属性,都会被构造函数所拥有。
我们可以把相同的方法,直接定义在prototype对象上,这样所有实例对象就可以共享这些方法。
一般情况下,公共属性定义到构造函数里面,而公共方法定义在原型对象上。
原型的主要作用是共享方法
创建对象时系统会自动添加一个 proto 属性指向我们构造函数的原型对象 prototype
对象原型(__proto __)和 构造函数原型对象(prototype)里面都有一个cunstructor属性,称为构造函数,因此它指向构造函数本身。
当Starprototype 以对象的形式添加方法时,会删除constructor属性,所以需要我们手动添加回来
我在Object原型对象中定义个dacen方法,ldh实例对象也能访问到。Object是原型链的尽头
查找机制:
ldh实例首先会在自身对象中查找,如果找不到该方法,则会在Stat原型对象中找,如果还找不到,就会通过__ proto__原型,到Object原型对象上找,直到为null。
函数对象都是有Function函数生成的,而Function自身也是函数,则有Function__ proto__ === Functionprototype // true (函数是自身的实例)
Object 也是构造函数,所以Object__ proto__ === Functionprototype //对象是函数的实例
以上就是关于Object.create()实现原型继承全部的内容,包括:Object.create()实现原型继承、原型法和面向对象的分析与设计方法(2)、js原型继承的几种方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)