原型prototype
JS对象的比较
由于JS是解释执行的语言,那么代码中出现函数与对象如果重复执行,会创建多个副本
- 创建一个Person构造函数,要求有name,age,gender,sayHello
- 代码如下:
function Person(name,age,gender){
this.name=name;
this.age=age;
this.gender=gender;
this.sayHello=function(){};
}
- 这种构造函数会影响性能,容易造成多个对象有多个对象副本,应该将方法单独抽取出来,让所有的对象共享该方法. 代码如下:
function sayHello(){};
function Person(name,age,gender){
this.name=name;
this.age=age;
this.gender=gender;
this.sayHello=sayHello;
}
- 可以考虑将方法全部放到外面,但是有安全隐患
- 在开发中会引入各种框架和库,自定义的成员越多,出现命名冲突的几率越大
- 在开发中会有多个构造函数,,每一个构造函数有很多方法,就会变得不容易维护
- 解决办法是外面的函数不占用名字,而且在构造函数旗下就可以了
- 每一个构造函数在定义的时候,都会有一个神秘对象被创建出来
- 每一个由构造函数创建出来的实例对象都会默认的连接到该神秘对象上 代码如下:
function Person(name,age,gender){
this.name=name;
this.age=age;
this.gender=gender;
}
Person.prototype.sayHello=function(){
console.log( 'hello!' ) ;
};
var p1=new Person('张三',10,'male');
p1.sayHello()
var p2=new Person('张四',13,'male');
p2.sayHello();
- 该神秘对象就是prototype,由构造函数创建出来的众多对象共享的一个对象
- 只需要将共享的东西,重复会多占用内存的东西放到构造函数.prototype中,那么所有的对象都可以共享
原型相关的概念
关于面向对象的概念
- 类 class 在js中就是构造函数
- 在传统的面向对象语言中,使用一个叫类的东西定义模版,然后使用模版创建对象
- 在构造方法中也具有类似的功能,因此称其为类
- 实例与对象
- 实例一般是指某一个构造函数创建出来的对象,我们称这个对象为这个构造函数的实例
- 实例就是一个对象,对象是一个泛称
- 键值对与属性和方法
- 在js中键值对的集合称为对象
- 如果值为数据(非函数),就称该键值对为对象的属性 property
- 如果值为函数,就称为对象的方法 method
- 父类与子类
- 传统的面向语言中使用类来继承,就有父类,子类的概念
- 父类又称为基类, 子类又称为派生类
- 在 js 中常常称为父对象, 子对象. 基对象, 派生对象
- 类 class 在js中就是构造函数
原型相关的概念
- 神秘对象针对构造函数称为 "原型属性"
- 神秘对象就是构造函数的原型属性
- 简称原型
- 神秘对象针对构造函数创建出来的对象称为"原型对象"
- 当访问实例对象的属性时或方法时,如果构造函数没有,就到到对应的原型对象中去找
- 简称原型
- 对象继承自其原型
- 构造函数创建的对象 继承自 构造函数的原型属性
- 构造函数创建的对象 继承自 该对象的原型对象
- 构造函数创建的对象与构造函数的原型属性表示的是两个不同的对象
- 原型中的成员可以直接被实例对象所使用
- 实例对象继承自原型
- 这样的继承就是 "原型继承"
- 神秘对象针对构造函数称为 "原型属性"
如何使用原型
- 使用对象的动态特性
- 构造函数.prototype.XXX = vvvv;
- 直接替换
- 使用对象的动态特性
Student.prototype = {
sayHello: function () {},
study: function () {}
};
原型prototype的更多相关文章
- 简单理解javascript的原型prototype
原型和闭包是Js语言的难点,此文主要讲原型. 每一个方法都有一个属性是 prototype 每一个对象都有一个属性是 _proto_ 一旦定义了原型属性或原型方法,则所有通过该构造函数实例化出来的所有 ...
- 克隆复制可使用原型( Prototype)设计模式
今天有学习设计模式的原型(Prototype)<设计模式--原型(Prototype)模式>http://www.cnblogs.com/insus/p/4152773.html .为了加 ...
- 原型 prototype
原型 prototype js 的对象比较 由于 js 是解释执行的语言, 那么再代码中出现函数与对象如果重复执行, 会创建多个副本 在代码中重复执行的代码容易出现重复的对象 创建一个 Person ...
- js最好的继承机制:用对象冒充继承构造函数的属性,用原型prototype继承对象的方法。
js最好的继承机制:用对象冒充继承构造函数的属性,用原型prototype继承对象的方法. function ClassA(sColor) { this.color = sColor; } Class ...
- 类(class)、构造函数(constructor)、原型(prototype)
类 Class 类的概念应该是面向对象语言的一个特色,但是JavaScript并不像Java,C++等高级语言那样拥有正式的类,而是多数通过构造器以及原型方式来仿造实现.在讨论构造器和原型方法前,我可 ...
- 原型prototype -- 深入理解javascript
/* 原型Prototype */ //一.原型 //原型使用一 var calculator = function (dlg, tax) { this.dlg = dlg; this.tax = t ...
- 悟透Javascript之 原型prototype
构造函数的Prototype上定义的方法确实可以通过对象直接调用,而且代码是共享的.我表示我不懂.太难理解了,艹.在Javascript中,prototype不但能让对象共享自己的财富,而且proto ...
- JS原型,Prototype,原型
对于javascript这样一种前端语言,个人觉得,要真正的理解其oop, 就必须要彻底搞清楚javascript的对象,原型链,作用域,闭包,以及this所引用的对象等概念.这些对弄明白了,应该就可 ...
- 原型prototype、原型链__proto__、构造器constructor
创建函数时,会有原型prototype,有原型链__proto__,有constructor.(构造函数除外,没有原型) . prototype原型:是对象的一个属性(也是对象),使你有能力向对象添加 ...
- 原型(Prototype)模式
原型模式属于对象的创建模式.通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象.这就是原型模式的用意.原型模式的结构 原型模式要求对象实现一个可以“克隆 ...
随机推荐
- js每天进步一点点
本人菜鸟一枚,进入公司不久,任务不多,期待从零开始学习js,请各位大牛指导!! <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transit ...
- Windows Azure Virtual Machine (29) 修改Azure VM 数据磁盘容量
<Windows Azure Platform 系列文章目录> 当我们使用Windows Azure管理界面,创建Azure虚拟机的时候,默认挂载的磁盘是固定大小的 1.比如我创建1个Wi ...
- Centos6.5 python升级成2.7版本出现的一些问题解决方法
由于功能及程序依赖,需要将Centos上的python从2.6升级成2.7,把碰到的一些问题记录如下: 安装好2.7后将原来的/usr/bin/python改成/usr/bin/python26,并将 ...
- Java进阶之reflection(反射机制)——反射概念与基础
反射机制是Java动态性之一,而说到动态性首先得了解动态语言.那么何为动态语言? 一.动态语言 动态语言,是指程序在运行时可以改变其结构:新的函数可以引进,已有的函数可以被删除等结构上的变化.比如常见 ...
- Redis使用总结(3):实现简单的消息队列
参考Redis实现简单消息队列 Redis提供了两种方式来作消息队列.一个是使用生产者消费模式模式,另外一个方法就是发布订阅者模式.前者会让一个或者多个客户端监听消息队列,一旦消息到达,消费者马上消费 ...
- 手机端布局 - rem计算
功能说明:以一个640px的宽度为基准,最小不低于320px,当大于640px时,让其在页面中居中. 如果正处于640 - 320之中的,都按照js进行等比例的缩放. 这里我们规定1rem = 100 ...
- LeetCode - Triangle
题目: Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjace ...
- 【原创】Kakfa utils源代码分析(三)
Kafka utils包最后一篇~~~ 十五.ShutdownableThread.scala 可关闭的线程抽象类! 继承自Thread同时还接收一个boolean变量isInterruptible表 ...
- LINQ使用Lambda表达式选择几列
学习LINQ的Lambda的表达式,尝试从数据集合中,选择其中几列. 创建一个model: source code: namespace Insus.NET.Models { public class ...
- Web API应用架构在Winform混合框架中的应用(5)--系统级别字典和公司级别字典并存的处理方式
在我这个系列中,我主要以我正在开发的云会员管理系统为例进行介绍Web API的应用,由于云会员的数据设计是支持多个商家公司,而每个公司又可以包含多个店铺的,因此一些字典型的数据需要考虑这方面的不同.如 ...