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变量.对构造 ...
随机推荐
- 【iOS开发】UIWebView与JavaScript(JS) 回调交互
------------------------------------------------- 很多关于objc 与 js 交互的文章都比较适用于 mac开发,iOS的webview 还是有所不一 ...
- iOS 验证邮箱手机号格式
做登录界面时,用户在UITextfield中输入输入邮箱账号后,我们应该在本地验证格式是否正确,再将参数传给服务器验证. 最简单的就是利用系统的NSPredicate //利用正则表达式验证 -(BO ...
- wordpress对显示某分类目录的文章列表页时对单个文章显示字数限制和省略
wordpress会在对应的此类列表页面模板中,遍历输出每篇文章的信息,缩略图,作者,正文,标题等, 输出具体的正文的部分 使用这样一句 <?php the_content(''); ?> ...
- Jmeter代理录制脚本
录制的原理: 1.LR/Jmeter录制是针对网络通讯协议层面的,它只关心客户端与服务器端的通讯包2.LR/Jmeter的并发测试实际上就是并发客户端与服务器端的通讯过程3.压力是通过多进程/多线程方 ...
- OOD沉思录 --- 类和对象的关系 --- 包含关系1
4.5 如果类包含另一个类的对象,那么包含类应当向被包含的对象发送消息(调用方法). 也就是说,所有的包含关系都应当是使用关系. 如果不是这样,那么包含的类有什么用处呢?当然,面向过程的开发人员会想 ...
- Memcache限制端口和访问IP
Memcache安装十分简单,默认情况下是任何人都可以访问服务器上缓存的数据,所以如果不作处理的话 是很不安全的(乌云上已经提交有很多与此相关的问题) 1.首先要保证服务器上的防火墙都是开启的 2.设 ...
- Eclipse報錯:Could not find or load main class
代碼正確,但在Eclipse中無法運行,一直報錯: Could not find or load main class
- JavaScript闭包的底层运行机制
转自:http://blog.leapoahead.com/2015/09/15/js-closure/ 我研究JavaScript闭包(closure)已经有一段时间了.我之前只是学会了如何使用它们 ...
- java微信接口之四—上传素材
一.微信上传素材接口简介 1.请求:该请求是使用post提交地址为: https://api.weixin.qq.com/cgi-bin/media/uploadnews?access_token=A ...
- uname
uname uname用于打印操作系统和硬件架构相关的信息,对于可能在多个系统或架构上运行的Shell脚本程序很有用, 缺省选项相当于 -s 或--system $uname [-amnrsvpio] ...