Javascript 面向对象中的构造函数和原型对象
先解释下原型。每一个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 面向对象中的构造函数和原型对象相关推荐
- javascript面向对象系列第一篇——构造函数和原型对象
前面的话 一般地,javascript使用构造函数和原型对象来进行面向对象编程,它们的表现与其他面向对象编程语言中的类相似又不同.本文将详细介绍如何用构造函数和原型对象来创建对象 构造函数 构造函数是 ...
- 深入理解Javascript中构造函数和原型对象的区别
在 Javascript中prototype属性的详解 这篇文章中,详细介绍了构造函数的缺点以及原型(prototype),原型链(prototype chain),构造函数(constructor) ...
- javascript面向对象精要学习总结(第四章 构造函数和原型对象)
constructor 实例的构造函数属性 它是实例的构造函数属性,指向创建它的构造函数 不要用它来检测对象的类型,因为它可以被覆盖,并不准确 检测对象类型最好使用 instanceof functi ...
- 34 JavaScript中的构造函数和原型
技术交流QQ群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder的程序人生 1.概述 在典型的OOP语言中(如Java),都存在类的概念.类就是对象的模板,对象就是类 ...
- [转]JavaScript构造函数及原型对象
JavaScript中没有类的概念,所以其在对象创建方面与面向对象语言有所不同. JS中对象可以定义为"无序属性的集合".其属性可以包含基本值,对象以及函数.对象实质上就是一组没有 ...
- JavaScript进阶-编程思想、构造函数的原型对象、对象原型、原型继承以及原型链
编程思想 面向过程 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个的依次 调用就可以了. 优点: 性能比面向对象高,适合跟硬件联系很紧密 的东西,例如单 ...
- JavaScript 进阶 35 -- 构造函数、原型对象、实例之间的关系详解
说到继承 ,先要弄明白 :构造函数.原型对象.实例之间的关系. 先来了解几个简单的概念: 构造函数:通过 关键字 new 来调用的 函数,var p = new Person():Person就称为构 ...
- 面向对象;构造函数;原型对象
构造函数 构造函数 1.什么是构造函数 2.为什么要使用构造函数 如何封装一个构造函数 3.构造函数的执行过程 4.构造函数的返回值 5.与普通函数的区别 5.1调用方式的不同 5.2 返回值不同 5 ...
- 面向对象2(构造函数、实例对象、原型对象——关系理解)
参考解释: 对象原型 构造函数与实例对象 构造函数与实例对象 关系: 实例对象是通过构造函数来创建的,创建的过程叫实例化. 示例代码: //1.自定义构造函数 function Person(name ...
最新文章
- 技术大佬的肺腑之言:“不要为了 AI 而 AI”! | 刷新 CTO
- C8-1 复数加减乘除 (100/100 分数)
- Java反编译Jar包和Android APK(类似.NET Reflector)
- 解决远程登陆Linux误按ctrl+s锁屏
- matlab hashset,MATLAB集合操作
- WordPress /wp-admin/includes/post.php user_ID 参数操作权限提升漏洞
- VS toolTip1控件的使用1
- 第一阶段 03Java的基本数据类型
- java webservice 身份验证_java-Http基本身份验证不适用于Spring WS和WebS...
- 如何阻止复制剪切和粘贴事件
- centos mysql压缩文件直接恢复_CentOS下利用mysqlbinlog恢复MySQL数据库
- 一键修改QQ运动刷步助手 V3.0
- php poedit怎么debug,php – 如何使PoEdit正确解析自定义“ngettext”实现?
- Alfred神器使用手册
- ssm 订单功能实现
- vue+qrcode批量生成二维码
- Vue表单输入绑定(v-model)
- 笔记本显示dns服务器,笔记本电脑显示无线网DNS设置错误该怎么解决
- [学习笔记]马氏链模型
- 什么是函数式编程?总结
热门文章
- Cannot forward after response has been committed
- MQTT连接服务器返回2
- LoadRunner解决“服务器正在运行中”方法
- Javascript中的form
- 浅谈JavaScript中的apply、call和bind
- 東方 project 联机版开发日记(1)
- 使用stanford nlp进行依存句法分析
- Myeclipse启动Tomcat服务器Address already in use: JVM_Bind
- SQL error: cannot use the special principal 'sa'
- 《BI那点儿事》数据流转换——派生列