先解释下原型。每一个Javascript对象(null除外)都和另外一个对象相关联,这个“另外一个对象”就是我们熟知的原型, 每一个对象都从原型继承属性和行为(方法)。

var   a = {}; //原型对象为Object.prototype
var   array = new Array()// 原型对象为Array.prototype
var   myInstance = new MyClass;// 原型对象为MyClass.prototype

在Javascript中,类的所有实例对象都从同一个原型对象上继承属性,下面先看一个例子

function Range是 Range类的构造函数用以初始化新创建的Range类的对象,构造函数并没有创建并返回一个对象,仅仅是初始化,并且在构造函数中用this设置的属性不是每个实例共享的,而是独享的,this是对当前对象的应用。

function Range(from, to) {if(from)this.from = from;//对象的自有属性,在对象中会覆盖从原型那里继承来的from值if(to)this.to = to;
}

而所有对象实例都会继承的属性和行为(方法)都在原型对象里

Range.prototype = {includes : function(x) {return this.from <= x && x <= this.to},foreach : function(f) {for(var x = Math.ceil(this.form); x < this.from; x++)  f(x);},toString : function() {return "(" + this.from + "......" + this.to + ")";},from : 1,getBeginning : function() {return this.from}
}
var r = new Range(2, 5);
r.include(3);// true , 3在范围内
r.foreach(alert);//输出2 3 4 5
console.log(r)//
r.getBeginng() // 2 因为在构造函数初始化r的时候已经把属性“from”设置成2了

任何Javascript函数都可以做构造函数,并且用new 关键字调用构造函数时是要用到一个prototype属性的。因此每个javascript函数都会自动拥有一个prototype属性。比如

Range.prototype.init = function () {}
nr = new Range.prototype.init();// nr 的属性继承自Range.prototype.init.prototype

原型对象是类的唯一标示,当且仅当两个对象继承自同一个原型对象时,他们才是属于同一个类的实例,而初始化对象的构造函数则不能作为类的标示。 两个构造函数的prototype属性可能指向同一个原型对象,这时通过new调用两个构造函数创建的实例是属于同一个类的。

上面的例子继续修改

Range.prototype.init.prototype = Range.prototype;//引用传递所以不用担心循环引用;

这样通过new Range()和 new Range.prototype.init()创建的对象都是属于Range类的。

console.log((r instanceof Range)); //true
console.log((nr instanceof Range)); //true

Javascript 面向对象中的构造函数和原型对象相关推荐

  1. javascript面向对象系列第一篇——构造函数和原型对象

    前面的话 一般地,javascript使用构造函数和原型对象来进行面向对象编程,它们的表现与其他面向对象编程语言中的类相似又不同.本文将详细介绍如何用构造函数和原型对象来创建对象 构造函数 构造函数是 ...

  2. 深入理解Javascript中构造函数和原型对象的区别

    在 Javascript中prototype属性的详解 这篇文章中,详细介绍了构造函数的缺点以及原型(prototype),原型链(prototype chain),构造函数(constructor) ...

  3. javascript面向对象精要学习总结(第四章 构造函数和原型对象)

    constructor 实例的构造函数属性 它是实例的构造函数属性,指向创建它的构造函数 不要用它来检测对象的类型,因为它可以被覆盖,并不准确 检测对象类型最好使用 instanceof functi ...

  4. 34 JavaScript中的构造函数和原型

    技术交流QQ群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder的程序人生 1.概述 在典型的OOP语言中(如Java),都存在类的概念.类就是对象的模板,对象就是类 ...

  5. [转]JavaScript构造函数及原型对象

    JavaScript中没有类的概念,所以其在对象创建方面与面向对象语言有所不同. JS中对象可以定义为"无序属性的集合".其属性可以包含基本值,对象以及函数.对象实质上就是一组没有 ...

  6. JavaScript进阶-编程思想、构造函数的原型对象、对象原型、原型继承以及原型链

    编程思想 面向过程 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个的依次 调用就可以了. 优点: 性能比面向对象高,适合跟硬件联系很紧密 的东西,例如单 ...

  7. JavaScript 进阶 35 -- 构造函数、原型对象、实例之间的关系详解

    说到继承 ,先要弄明白 :构造函数.原型对象.实例之间的关系. 先来了解几个简单的概念: 构造函数:通过 关键字 new 来调用的 函数,var p = new Person():Person就称为构 ...

  8. 面向对象;构造函数;原型对象

    构造函数 构造函数 1.什么是构造函数 2.为什么要使用构造函数 如何封装一个构造函数 3.构造函数的执行过程 4.构造函数的返回值 5.与普通函数的区别 5.1调用方式的不同 5.2 返回值不同 5 ...

  9. 面向对象2(构造函数、实例对象、原型对象——关系理解)

    参考解释: 对象原型 构造函数与实例对象 构造函数与实例对象 关系: 实例对象是通过构造函数来创建的,创建的过程叫实例化. 示例代码: //1.自定义构造函数 function Person(name ...

最新文章

  1. 技术大佬的肺腑之言:“不要为了 AI 而 AI”! | 刷新 CTO
  2. C8-1 复数加减乘除 (100/100 分数)
  3. Java反编译Jar包和Android APK(类似.NET Reflector)
  4. 解决远程登陆Linux误按ctrl+s锁屏
  5. matlab hashset,MATLAB集合操作
  6. WordPress /wp-admin/includes/post.php user_ID 参数操作权限提升漏洞
  7. VS toolTip1控件的使用1
  8. 第一阶段 03Java的基本数据类型
  9. java webservice 身份验证_java-Http基本身份验证不适用于Spring WS和WebS...
  10. 如何阻止复制剪切和粘贴事件
  11. centos mysql压缩文件直接恢复_CentOS下利用mysqlbinlog恢复MySQL数据库
  12. 一键修改QQ运动刷步助手 V3.0
  13. php poedit怎么debug,php – 如何使PoEdit正确解析自定义“ngettext”实现?
  14. Alfred神器使用手册
  15. ssm 订单功能实现
  16. vue+qrcode批量生成二维码
  17. Vue表单输入绑定(v-model)
  18. 笔记本显示dns服务器,笔记本电脑显示无线网DNS设置错误该怎么解决
  19. [学习笔记]马氏链模型
  20. 什么是函数式编程?总结

热门文章

  1. Cannot forward after response has been committed
  2. MQTT连接服务器返回2
  3. LoadRunner解决“服务器正在运行中”方法
  4. Javascript中的form
  5. 浅谈JavaScript中的apply、call和bind
  6. 東方 project 联机版开发日记(1)
  7. 使用stanford nlp进行依存句法分析
  8. Myeclipse启动Tomcat服务器Address already in use: JVM_Bind
  9. SQL error: cannot use the special principal 'sa'
  10. 《BI那点儿事》数据流转换——派生列