JS原型对象操作实例分析


Posted in Javascript onJune 06, 2020

本文实例讲述了JS原型对象操作。分享给大家供大家参考,具体如下:

万物皆对象,函数也同样是对象,是特殊的函数对象

function fn() {}
let a = new fn();
let b = new Function()

console.log(typeof a);  // object 
console.log(typeof b);  // function

打开浏览器,输入fn,会发现fn有一个prototype(原型)属性,这个属性是一个指针,指向原型对象,这个对象包括了特定类型所有共享的属性和方法。
换句话说,prototype对象包含了函数所有的共享属性和方法。

function fn() {}
fn.prototype.a = 18;
fn.prototype.b = "b";
fn.prototype.test = function() {
 console.log(123);  
}
var r = new fn();
console.log(r.a);  // 18

我们直接在函数fn的原型属性上加了两个属性和一个方法,实例化后便可以访问原型中的值。

  • 原型对象有一个constructor属性,它也是一个指针,它指向原来的函数,也就是说,fn.prototype.constructor == fn。
  • 所有的实例都有这个原型对象,因此实例可以访问到原型对象中的属性和方法。

JS原型对象操作实例分析

那么实例怎么搜索变量或者方法的值呢?首先,函数实例会在函数本身上去寻找该变量,如果没有找到,会在原型对象上寻找变量。

function fn() {}
fn.prototype.a = 18;
fn.prototype.b = "b";
fn.prototype.test = function() {
 console.log(123);
}
var a = new fn();
var b = new fn();
b.a = 20
console.log(b.a);  // 20
console.log(a.a);  // 18

创建了两个实例,在b实例上手动添加了一个a属性,在fn的原型对象上也有一个a属性,那么对于b实例会优先访问本身的属性而不是原型上的属性。

参考内容:JavaScript高级程序设计

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
JavaScript 三种不同位置代码的写法
Oct 25 Javascript
javascript模拟的Ping效果代码 (Web Ping)
Mar 13 Javascript
为EasyUI的Tab标签添加右键菜单的方法
Jul 14 Javascript
js 为label标签和div标签赋值的方法
Aug 08 Javascript
jquery浏览器滚动加载技术实现方案
Jun 03 Javascript
jQuery队列操作方法实例
Jun 11 Javascript
js和jquery中循环的退出和继续学习记录
Sep 06 Javascript
jQuery检测滚动条是否到达底部
Dec 15 Javascript
基于javascript实现窗口抖动效果
Jan 03 Javascript
vue实现点击选中,其他的不选中方法
Sep 05 Javascript
详解vue beforeEach 死循环问题解决方法
Feb 25 Javascript
Vue使用Proxy代理后仍无法生效的解决
Nov 13 Javascript
JS中的继承操作实例总结
Jun 06 #Javascript
ES6 async、await的基本使用方法示例
Jun 06 #Javascript
JS 数组和对象的深拷贝操作示例
Jun 06 #Javascript
ES6 Generator基本使用方法示例
Jun 06 #Javascript
jquery.validate自定义验证用法实例分析【成功提示与择要提示】
Jun 06 #jQuery
ES6 Symbol在对象中的作用实例分析
Jun 06 #Javascript
微信小程序多列表渲染数据开关互不影响的实现
Jun 05 #Javascript
You might like
php数据库配置文件一般做法分享
2012/07/07 PHP
thinkphp视图模型查询提示ERR: 1146:Table 'db.pr_order_view' doesn't exist的解决方法
2014/10/30 PHP
thinkphp使用literal防止模板标签被解析的方法
2014/11/22 PHP
推荐一本PHP程序猿都应该拜读的书
2014/12/31 PHP
PHP的简单跳转提示的实现详解
2019/03/14 PHP
php使用gearman进行任务分发操作实例详解
2020/02/26 PHP
JavaScript setTimeout和setInterval的使用方法 说明
2010/03/25 Javascript
解决IE6的PNG透明JS插件使用介绍
2013/04/17 Javascript
js动态添加事件并可传参数示例代码
2013/10/21 Javascript
Js获取数组最大和最小值示例代码
2013/10/29 Javascript
探讨jQuery的ajax使用场景(c#)
2013/12/03 Javascript
jquery中ajax函数执行顺序问题之如何设置同步
2014/02/28 Javascript
浅谈javascript的调试
2015/01/28 Javascript
超赞的动手创建JavaScript框架的详细教程
2015/06/30 Javascript
jquery与ajax获取特殊字符实例详解
2017/01/08 Javascript
基于React实现表单数据的添加和删除详解
2017/03/14 Javascript
关于Vue实现组件信息的缓存问题
2017/08/23 Javascript
使用JS实现气泡跟随鼠标移动的动画效果
2017/09/16 Javascript
详解小程序输入框闪烁及重影BUG解决方案
2018/08/31 Javascript
js实现移动端吸顶效果
2020/01/08 Javascript
python和pyqt实现360的CLable控件
2014/02/21 Python
eclipse创建python项目步骤详解
2019/05/10 Python
详解Python传入参数的几种方法
2019/05/16 Python
简单了解Python生成器是什么
2019/07/02 Python
python3在同一行内输入n个数并用列表保存的例子
2019/07/20 Python
基于python读取.mat文件并取出信息
2019/12/16 Python
pytorch标签转onehot形式实例
2020/01/02 Python
Pycharm配置lua编译环境过程图解
2020/11/28 Python
Python实现疫情地图可视化
2021/02/05 Python
大学三年的自我评价
2013/12/25 职场文书
旅游专业毕业生自荐书
2014/06/30 职场文书
大二学年个人总结
2015/03/03 职场文书
老干部局2015年度工作总结
2015/10/22 职场文书
Python深度学习之实现卷积神经网络
2021/06/05 Python
关于对TypeScript泛型参数的默认值理解
2022/07/15 Javascript