基于js中的原型(全面讲解)


Posted in Javascript onSeptember 19, 2017

在讲js的原型之前,必须先了解下Object和Function。

Object和Function都作为JS的自带函数,Object继承自己,Funtion继承自己,Object和Function互相是继承对方,也就是说Object和Function都既是函数也是对象。

console.log(Function instanceof Object); // true
console.log(Object instanceof Function); // true

Object 是 Function的实例,而Function是它自己的实例。

console.log(Function.prototype); // ƒ () { [native code] }
console.log(Object.prototype);  // Object

普通对象和函数对象

JavaScript中万物皆对象,但对象之间也是有区别的。分为函数对象和普通对象。

函数对象可以创建普通对象,普通对象没法创建函数对象,普通对象JS世界中最低级的小喽???短厝ㄒ裁挥小?/p>

凡是通过new Function创建的对象都是函数对象,其他都是普通对象(通常通过Object创建),可以通过typeof来判断。

function f1(){};
typeof f1 //"function"


var o1 = new f1();
typeof o1 //"object"

var o2 = {};
typeof o2 //"object"

这边要注意的是下面这两种写法是一样的

function f1(){};  ==  var f1 = new Function();
function f2(a,b){
  alert(a+b);
}

等价于

var f2 = new Function(a,b,"alert(a+b)");

prototype、_proto_和construetor(构造函数)

下面两句话也很重要

1、每一个函数对象都有一个prototype属性,但是普通对象是没有的;

  prototype下面又有个construetor,指向这个函数。

2、每个对象都有一个名为_proto_的内部属性,指向它所对应的构造函数的原型对象,原型链基于_proto_;

好了,开始上代码和例子,建一个普通对象,我们可以看到

1、o的确没有prototype属性

2、o是Object的实例

3、o的__proto__指向Object的prototype

4、Object.prototype.constructor指向Object本身

还可以继续往下延伸......

var o = {};
  console.log(o.prototype); //undefined
  console.log(o instanceof Object); //true
  console.log(o.__proto__ === Object.prototype) //true
  console.log(Object === Object.prototype.constructor) //true 
  console.log(Object.prototype.constructor) //function Object()
console.log(Object.prototype.__proto__); //null

基于js中的原型(全面讲解)

下面来一个函数对象,从下面的例子可以看出

1、demo是函数对象,f1还是普通对象

2、f1是Demo的实例

3、demo的原型prototype的__proto__指向Object的原型prototype,而Object的原型prototyped的__proto__指向null;

function Demo(){};
  var f1 = new Demo();
  console.log(f1.prototype); //undefined
  console.log(f1 instanceof Demo); //true
  console.log(f1.__proto__ === Demo.prototype); //true
  console.log(Demo === Demo.prototype.constructor) ;//true
  console.log(Demo.prototype.__proto__ === Object.prototype) ;//true
  console.log(Object.prototype.__proto__); //null

基于js中的原型(全面讲解)

原型链

javascript中,每个对象都会在内部生成一个proto 属性,当我们访问一个对象属性时,如果这个对象不存在就回去proto 指向的对象里面找,一层一层找下去,这就是javascript原型链的概念。

f1.__proto__ ==> Demo.prototype ==> Demo.prototype.__proto__ ==> Object.prototype ==> Object.prototype.__proto__ ==> null

JS中所有的东西都是对象,所有的东西都由Object衍生而来, 即所有东西原型链的终点指向null

以上这篇基于js中的原型(全面讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS截取字符串常用方法详细整理
Oct 28 Javascript
Javascript让DEDECMS告别手写Tag
Sep 01 Javascript
javascript实现table选中的行以指定颜色高亮显示的方法
May 13 Javascript
Backbone.js 0.9.2 源码注释中文翻译版
Jun 25 Javascript
JavaScript的jQuery库中ready方法的学习教程
Aug 14 Javascript
最佳的JavaScript错误处理实践
Jul 16 Javascript
利用js编写网页进度条效果
Oct 08 Javascript
Angular2.0/4.0 使用Echarts图表的示例代码
Dec 07 Javascript
JS高级技巧(简洁版)
Jul 29 Javascript
解决vue router组件状态刷新消失的问题
Aug 01 Javascript
JavaScript判断对象和数组的两种方法
May 31 Javascript
ant design中upload组件上传大文件,显示进度条进度的实例
Oct 29 Javascript
Node.js+jade抓取博客所有文章生成静态html文件的实例
Sep 19 #Javascript
Node.js中Bootstrap-table的两种分页的实现方法
Sep 18 #Javascript
Node.js 使用递归实现遍历文件夹中所有文件
Sep 18 #Javascript
Node.JS 循环递归复制文件夹目录及其子文件夹下的所有文件
Sep 18 #Javascript
为什么我们要做三份 Webpack 配置文件
Sep 18 #Javascript
分析javascript中9 个常见错误阻碍你进步
Sep 18 #Javascript
十个免费的web前端开发工具详细整理
Sep 18 #Javascript
You might like
php模板原理讲解
2013/11/13 PHP
php实现递归抓取网页类实例
2015/04/03 PHP
php cookie 详解使用实例
2016/11/03 PHP
php面向对象之反射功能与用法分析
2017/03/29 PHP
jquery如何获取复选框的值
2013/12/12 Javascript
qq悬浮代码(兼容各个浏览器)
2014/01/29 Javascript
js简单的表格添加行和删除行操作示例
2014/03/31 Javascript
jQuery实现TAB选项卡切换特效简单演示
2016/03/04 Javascript
js模拟微博发布消息
2017/02/23 Javascript
基于HTML5+JS实现本地图片裁剪并上传功能
2017/03/24 Javascript
[01:36:57]【09DOTA2第一视角】小骷髅
2014/04/16 DOTA
[07:20]2018DOTA2国际邀请赛寻真——逐梦Mineski
2018/08/10 DOTA
[01:42:49]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第一场 2月26日
2021/03/11 DOTA
Python性能提升之延迟初始化
2016/12/04 Python
Python如何实现守护进程的方法示例
2017/02/08 Python
Python引用传值概念与用法实例小结
2017/10/07 Python
Python Unittest自动化单元测试框架详解
2018/04/04 Python
python3+PyQt5 实现Rich文本的行编辑方法
2019/06/17 Python
Python 一键获取百度网盘提取码的方法
2019/08/01 Python
tensorflow的计算图总结
2020/01/12 Python
Django自定义全局403、404、500错误页面的示例代码
2020/03/08 Python
CSS3感应鼠标的背景闪烁和图片缩放动画效果
2014/05/14 HTML / CSS
Ralph Lauren法国官网:美国高品味时装品牌
2017/12/08 全球购物
台湾母婴用品购物网站:Infant婴之房
2018/06/15 全球购物
新英格兰最大的特色礼品连锁店:The Paper Store
2018/07/23 全球购物
戴尔马来西亚官网:Dell Malaysia
2020/05/02 全球购物
生态学毕业生自荐信
2013/10/27 职场文书
技校学生个人职业生涯规划范文
2014/03/03 职场文书
中秋节国旗下演讲稿
2014/09/13 职场文书
2014年检验员工作总结
2014/11/19 职场文书
2014年卫生保健工作总结
2014/12/08 职场文书
党员活动总结
2015/02/04 职场文书
2015年扫黄打非工作总结
2015/05/13 职场文书
基于flask实现五子棋小游戏
2021/05/25 Python
人工智能深度学习OpenAI baselines的使用方法
2022/05/20 Python
springboot 全局异常处理和统一响应对象的处理方式
2022/06/28 Java/Android