基于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 相关文章推荐
javascript 进度条 实现代码
Jul 30 Javascript
Jquery 快速构建可拖曳的购物车DragDrop
Nov 30 Javascript
Javascript对象中关于setTimeout和setInterval的this介绍
Jul 21 Javascript
js检查页面上有无重复id的实现代码
Jul 17 Javascript
js跳转页面方法总结
Jan 29 Javascript
vue绑定的点击事件阻止冒泡的实例
Feb 08 Javascript
jQuery滚动条美化插件nicescroll简单用法示例
Apr 18 jQuery
AngularJS实现的base64编码与解码功能示例
May 17 Javascript
浅谈webpack+react多页面开发终极架构
Nov 11 Javascript
vue实现日历备忘录功能
Sep 24 Javascript
使用webpack将ES6转化ES5的实现方法
Oct 13 Javascript
JavaScript实现栈结构详细过程
Dec 06 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 团购折扣计算公式
2011/11/24 PHP
phpmailer发送gmail邮件实例详解
2013/06/24 PHP
一个简单至极的PHP缓存类代码
2015/10/23 PHP
Ucren Virtual Desktop V2.0
2006/11/07 Javascript
用javascript将数据库中的TEXT类型数据动态赋值到TEXTAREA中
2007/04/20 Javascript
js获取URL的参数的方法(getQueryString)示例
2013/09/29 Javascript
5个数组Array方法: indexOf、filter、forEach、map、reduce使用实例
2015/01/29 Javascript
javascript去掉代码里面的注释
2015/07/24 Javascript
JS简单实现禁止访问某个页面的方法
2016/09/13 Javascript
完美的js div拖拽实例代码
2016/09/24 Javascript
jQuery中$原理实例分析
2018/08/13 jQuery
详解Vue项目中实现锚点定位
2019/04/24 Javascript
微信小程序单选radio及多选checkbox按钮用法示例
2019/04/30 Javascript
使用vue实现通过变量动态拼接url
2020/07/22 Javascript
Handtrack.js库实现实时监测手部运动(推荐)
2021/02/08 Javascript
[42:39]老党炸弹人试玩视频
2014/09/03 DOTA
python fabric实现远程操作和部署示例
2014/03/25 Python
解决python爬虫中有中文的url问题
2018/05/11 Python
Tensorflow 查看变量的值方法
2018/06/14 Python
Python的iOS自动化打包实例代码
2018/11/22 Python
详解分布式任务队列Celery使用说明
2018/11/29 Python
PyQt5显示GIF图片的方法
2019/06/17 Python
python 实现识别图片上的数字
2019/07/30 Python
python 进程间数据共享multiProcess.Manger实现解析
2019/09/23 Python
解决TensorFlow GPU版出现OOM错误的问题
2020/02/03 Python
Python实现实时数据采集新型冠状病毒数据实例
2020/02/04 Python
详解Python中string模块除去Str还剩下什么
2020/11/30 Python
CSS3属性使网站设计增强同时不消弱可用性
2009/08/29 HTML / CSS
西海岸男士和男童服装:Johnnie-O
2018/03/15 全球购物
家长会演讲稿范文
2014/01/10 职场文书
社区健康教育工作方案
2014/06/03 职场文书
党的群众路线对照检查材料思想汇报
2014/09/25 职场文书
大班下学期幼儿评语
2014/12/30 职场文书
中秋节晚会开场白
2015/05/29 职场文书
2016学习依法治国心得体会
2016/01/15 职场文书
MySQL导致索引失效的几种情况
2022/06/25 MySQL