JS对象的比较

由于JS是解释执行的语言,那么代码中出现函数与对象如果重复执行,会创建多个副本

  1. 创建一个Person构造函数,要求有name,age,gender,sayHello
  2. 代码如下:
     function Person(name,age,gender){
    this.name=name;
    this.age=age;
    this.gender=gender;
    this.sayHello=function(){};
    }

  3. 这种构造函数会影响性能,容易造成多个对象有多个对象副本,应该将方法单独抽取出来,让所有的对象共享该方法. 代码如下:
     function sayHello(){};
    function Person(name,age,gender){
    this.name=name;
    this.age=age;
    this.gender=gender;
    this.sayHello=sayHello;
    }

  4. 可以考虑将方法全部放到外面,但是有安全隐患
    • 在开发中会引入各种框架和库,自定义的成员越多,出现命名冲突的几率越大
    • 在开发中会有多个构造函数,,每一个构造函数有很多方法,就会变得不容易维护
  5. 解决办法是外面的函数不占用名字,而且在构造函数旗下就可以了
  6. 每一个构造函数在定义的时候,都会有一个神秘对象被创建出来
  7. 每一个由构造函数创建出来的实例对象都会默认的连接到该神秘对象上 代码如下:
    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();

  1. 该神秘对象就是prototype,由构造函数创建出来的众多对象共享的一个对象
  2. 只需要将共享的东西,重复会多占用内存的东西放到构造函数.prototype中,那么所有的对象都可以共享

原型相关的概念

  1. 关于面向对象的概念

    • 类 class 在js中就是构造函数

      • 在传统的面向对象语言中,使用一个叫类的东西定义模版,然后使用模版创建对象
      • 在构造方法中也具有类似的功能,因此称其为类
    • 实例与对象
      • 实例一般是指某一个构造函数创建出来的对象,我们称这个对象为这个构造函数的实例
      • 实例就是一个对象,对象是一个泛称
    • 键值对与属性和方法
      • 在js中键值对的集合称为对象
      • 如果值为数据(非函数),就称该键值对为对象的属性 property
      • 如果值为函数,就称为对象的方法 method
    • 父类与子类
      • 传统的面向语言中使用类来继承,就有父类,子类的概念
      • 父类又称为基类, 子类又称为派生类
      • 在 js 中常常称为父对象, 子对象. 基对象, 派生对象
  2. 原型相关的概念

    • 神秘对象针对构造函数称为 "原型属性"

      • 神秘对象就是构造函数的原型属性
      • 简称原型
    • 神秘对象针对构造函数创建出来的对象称为"原型对象"
      • 当访问实例对象的属性时或方法时,如果构造函数没有,就到到对应的原型对象中去找
      • 简称原型
    • 对象继承自其原型
      • 构造函数创建的对象 继承自 构造函数的原型属性
      • 构造函数创建的对象 继承自 该对象的原型对象
      • 构造函数创建的对象与构造函数的原型属性表示的是两个不同的对象
        • 原型中的成员可以直接被实例对象所使用
        • 实例对象继承自原型
        • 这样的继承就是 "原型继承"
  3. 如何使用原型

    • 使用对象的动态特性

      • 构造函数.prototype.XXX = vvvv;
    • 直接替换
        Student.prototype = {
sayHello: function () {},
study: function () {}
};

原型prototype的更多相关文章

  1. 简单理解javascript的原型prototype

    原型和闭包是Js语言的难点,此文主要讲原型. 每一个方法都有一个属性是 prototype 每一个对象都有一个属性是 _proto_ 一旦定义了原型属性或原型方法,则所有通过该构造函数实例化出来的所有 ...

  2. 克隆复制可使用原型( Prototype)设计模式

    今天有学习设计模式的原型(Prototype)<设计模式--原型(Prototype)模式>http://www.cnblogs.com/insus/p/4152773.html .为了加 ...

  3. 原型 prototype

    原型 prototype js 的对象比较 由于 js 是解释执行的语言, 那么再代码中出现函数与对象如果重复执行, 会创建多个副本 在代码中重复执行的代码容易出现重复的对象 创建一个 Person ...

  4. js最好的继承机制:用对象冒充继承构造函数的属性,用原型prototype继承对象的方法。

    js最好的继承机制:用对象冒充继承构造函数的属性,用原型prototype继承对象的方法. function ClassA(sColor) { this.color = sColor; } Class ...

  5. 类(class)、构造函数(constructor)、原型(prototype)

    类 Class 类的概念应该是面向对象语言的一个特色,但是JavaScript并不像Java,C++等高级语言那样拥有正式的类,而是多数通过构造器以及原型方式来仿造实现.在讨论构造器和原型方法前,我可 ...

  6. 原型prototype -- 深入理解javascript

    /* 原型Prototype */ //一.原型 //原型使用一 var calculator = function (dlg, tax) { this.dlg = dlg; this.tax = t ...

  7. 悟透Javascript之 原型prototype

    构造函数的Prototype上定义的方法确实可以通过对象直接调用,而且代码是共享的.我表示我不懂.太难理解了,艹.在Javascript中,prototype不但能让对象共享自己的财富,而且proto ...

  8. JS原型,Prototype,原型

    对于javascript这样一种前端语言,个人觉得,要真正的理解其oop, 就必须要彻底搞清楚javascript的对象,原型链,作用域,闭包,以及this所引用的对象等概念.这些对弄明白了,应该就可 ...

  9. 原型prototype、原型链__proto__、构造器constructor

    创建函数时,会有原型prototype,有原型链__proto__,有constructor.(构造函数除外,没有原型) . prototype原型:是对象的一个属性(也是对象),使你有能力向对象添加 ...

  10. 原型(Prototype)模式

    原型模式属于对象的创建模式.通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象.这就是原型模式的用意.原型模式的结构 原型模式要求对象实现一个可以“克隆 ...

随机推荐

  1. 《Administrator's Guide》之Managing Memory

    Automatic Memory Management 1. 如果要启动Automatic Memory Management,如何确定MEMORY_TARGET的值呢? 1> 在SQL*Plu ...

  2. MYSQL的深入学习--优化步骤

    MySql优化的一般步骤 1.通过show status 命令了解各种sql的执行效率 SHOW STATUS提供msyql服务器的状态信息 一般情况下,我们只需要了解以”Com”开头的指令 show ...

  3. selenium-webdriver(python) (十四) -- webdriver原理

    之前看乙醇视频中提到,selenium 的ruby 实现有一个小后门,在代码中加上$DEBUG=1 ,再运行脚本的过程中,就可以看到客户端请求的信息与服务器端返回的数据:觉得这个功能很强大,可以帮助理 ...

  4. 前端开发教程:使用 CSS3 Transforms 构建圆形导航

    在本教程中我将告诉你如何使用 CSS 变换来创建圆形导航.教程逐一讲解实现这个样式将要涉及一些基本的数学知识并配合 CSS 变换来创建这些样式.不过不用担心,这里用到的数学知识真的是很简单的.教程使用 ...

  5. Android开发资源获取国内代理(转载)

    Android Dev Tools官网地址:www.androiddevtools.cn 收集整理Android开发所需的Android SDK.开发中用到的工具.Android开发教程.Androi ...

  6. Eclipse快捷键大全(转载)

    一.实用类快捷键 1 常用熟悉的快捷键 CTRL+C(复制).CTRL+X(剪切).CTRL+Z(撤销).CTRL+F(查找).CTRL+H(搜索文件或字符串).CTRL+Y(重做).CTRL+/(双 ...

  7. java类的初始化和对象的创建顺序

    学习java编程思想--类的初始化p146 类的加载顺序* 1加载器启动找到 xxx.class文件,通过extends关键字寻找基类,先加载基类* 2类初始化先初始化static成员变量和stati ...

  8. JAVA 设计模式 命令模式

    用途 命令模式 (Command) 将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化:对请求排队或请求日志,以及支持可撤销的操作. 命令模式是一种行为型模式. 结构

  9. Sql Server,如何去含有非数字的nvarchar,再转为为数值

    菜鸟一枚,今天做项目时,突然遇到一个问题: 在数据库中中存放的nvarchar类型的“时间”,例如:‘08:00’,而我需要进行时间的范围比较,这时就想到了将nvarchar类型转化为int类型. 这 ...

  10. 用SQL语句查找包含有某个关键字的存储过程、触发器、函数等(仅适用MS SQL SERVER)

    第一种方法:利用系统表进行查询   --将text替换成你要查找的内容  select name  from sysobjects o, syscomments s  where o.id = s.i ...