JS 之原型,实例,构造函数之间的关系
JS是面向对象的语言,函数也是对象。下面大致介绍下实例,原型与构造函数之间的关系。
构造函数模式
function Person(name,age){
this.name = name;
this.age = age;
this.sayname = function(){
alert(this.name);
}
}
定义构造函数,函数名字首字母大写,并使用new操作符实例化构造函数。构造函数本身也是函数,只不过可以用来创建对象。构造函数的特点是:
1.没有显式的创建对象
2.将属性和方法赋给力this对象
3.没有return语句
实现步骤为:
1.创建一个新对象
2.将构造函数的作用域赋给新对象(this指向这个新对象)
3.执行构造函数的代码,给构造函数添加属性和方法
4.返回新对象
构造函数的主要问题是,每个方法都要在每个实例上创建一遍。
原型模式
每个函数都有一个prototype属性,这是一个指向其原型对象的指针。原型对象的好处就是可以让对象实例共享其原型对象中的属性和方法。
原型对象中的constructor属性指向其构造函数。构造函数的prototype指向其原型对象。如果使用对象字面量重写构造函数时,记得指定constructor属性,否则constructor会指向object.
实例
new构造函数就可以创建该构造函数的实例,实例对象中的__proto__指向其构造函数对应的原型对象。
构造函数的prototype指向其原型对象,原型对象的constructor指向其构造函数,使用new关键字实例化构造函数,实例化对象的__proto__指向其原始的原型对象。
创建自定义对象的有效方式就是组合使用构造函数模式和原型模式。构造函数模式定义实例属性,原型模式定义方法和公用的属性。这样每个实例都有自己自定义的属性,同时又共享着对方法的引用,最大成本的节省内存。
相关操作符
delete操作符:删除实例中的指定属性。从而可以访问原型中同名的属性。
hasOwnProperty()方法:检测一个属性是存在于该对象的实例中,属于实例属性时,才返回true,否则属于原型属性,则返回false。
in操作符:
单独使用时,如果该对象中存在这个属性,则返回true,不管这个属性是实例属性还是原型属性。name in object
使用for-in循环时,返回的是该对象可枚举的所有属性。
每个构造函数都有一个原型对象,原型对象包含一个指向构造函数的指针(constructor),而实例都包含一个指向原型对象的内部指针(__pro__)。
JS 之原型,实例,构造函数之间的关系的更多相关文章
- JS高级---实例对象和构造函数之间的关系
实例对象和构造函数之间的关系: 1. 实例对象是通过构造函数来创建的---创建的过程叫实例化 2. 如何判断对象是不是这个数据类型? 1) 通过构造器的方式 实例对象.构造器==构造函数 ...
- JavaScript中的 原型 property 构造函数 和实例对象之间的关系
1 为什么要使用原型? /* * javascript当中 原型 prototype 对象 * * */ //首先引入 prototype的意义,为什么要使用这个对象 //先来写一个构造函数的面向对象 ...
- 一篇文章理解JS继承——原型链/构造函数/组合/原型式/寄生式/寄生组合/Class extends
说实在话,以前我只需要知道"寄生组合继承"是最好的,有个祖传代码模版用就行.最近因为一些事情,几个星期以来一直心心念念想整理出来.本文以<JavaScript高级程序设计&g ...
- JS继承,原型继承,构造函数的继承,非构造函数"的继承
a.原型继承 一.new运算符的缺点 用构造函数生成实例对象,有一个缺点,那就是无法共享属性和方法.比如,在DOG对象的构造函数中,设置一个实例对象的共有属性species. function DOG ...
- JS中BOM和DOM之间的关系
一.Javascript组成JavaScript的实现包括以下3个部分:1.核心(ECMAScript):描述了JS的语法和基本对象.2.文档对象模型 (DOM):处理网页内容的方法和接口.3.浏览器 ...
- js、jq、ajax之间的关系
一句话:js是一种客户端脚本语言,jq是在js基础上封装起来的一个开发工具,ajax是基于js的一种技术(异步刷新). javascript是一种在客户端执行的脚本语言,用来给网页添加动态功能,使网页 ...
- js面向对象程序设计之构造函数
再上一篇的开头说了创建对象的两种方式,一种是Object构造函数的方式,一种是对象字面量的方法.但这些方式创建多个对象的时候都会产生大量的重复代码.经过技术的进步也演化出来许多的创建对象的模式.本章会 ...
- Javascript 构造函数、原型对象、实例之间的关系
# Javascript 构造函数.原型对象.实例之间的关系 # 创建对象的方式 # 1.new object() 缺点:创建多个对象困难 var hero = new Object(); // 空对 ...
- Js面向对象原型~构造函数
脑袋一团浆糊,但希望写点啥,所有就有了这篇博文了,抱歉哦....开始吧!!!! 什么是构造函数?? 所谓"构造函数",其实就是一个普通函数,但是内部使用了this变量.对构造 ...
随机推荐
- win8下出现安装sql2012 正在启动操作系统功能"NetFx3"
今天上午装win8系统,发现在装sql server 2012的时候,一直停在"正在启动操作系统功能"NetFx3""不动了,在网上找了下相关的资料,发现原来N ...
- mysql高可用之LVS + KEEPALIVE + MYSQL
1.架构图 注意 (一) Mysql需要把bind-address的配置去掉,否则无法实现虚拟ip访问 (二) 关闭所有linux防火墙:/sbin/iptables –F(可能没用) (三) ...
- [LoadRunner]录制启动时报“The JVM could not be started……”错误解决方案
在LR准备点击录制java over http协议时,程序报如下错误: 报错提示是设置的JVM值设置问题,导致不能启动. 解决方案一 点击F4快捷按钮,会弹出以下界面,在选中的位置选择对应的java路 ...
- js日期时间函数
日期时间脚本库方法列表 Date.prototype.isLeapYear 判断闰年Date.prototype.Format 日期格式化Date.prototype.DateAdd 日期计算Date ...
- java PKCS7Padding 加密Cannot find any provider supporting AES/CBC/PKCS7Padding 解决办法
在java中用aes256进行加密,但是发现java里面不能使用PKCS7Padding,而java中自带的是PKCS5Padding填充,那解决办法是,通过BouncyCastle组件来让java里 ...
- nginx命令详解
nginx的configure命令支持以下参数: --prefix=path 定义一个目录,存放服务器上的文件 ,也就是nginx的安装目录.默认使用 /usr/local/nginx. --s ...
- [转]Highcharts仪表盘制作
http://www.runoob.com/highcharts/highcharts-guage-solid.html 本文转自:http://blog.csdn.net/javaliuzhiyue ...
- [转]artDialog
本文转自:http://aui.github.io/artDialog/ http://aui.github.io/artDialog/doc/index.html artDialog —— 经典的网 ...
- JVM的内存区域划分
JVM的内存区域划分 学过C语言的朋友都知道C编译器在划分内存区域的时候经常将管理的区域划分为数据段和代码段,数据段包括堆.栈以及静态数据区.那么在Java语言当中,内存又是如何划分的 ...
- HDU 5056 Boring Count --统计
题解见官方题解,我这里只实现一下,其实官方题解好像有一点问题诶,比如 while( str[startPos] != str[i+1] ) cnt[str[startPos]]--, startPos ...