基于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 相关文章推荐
Mozilla 表达式 __noSuchMethod__
Apr 05 Javascript
jQuery中queue()方法用法实例
Dec 29 Javascript
基于Bootstrap使用jQuery实现简单可编辑表格
May 04 Javascript
JavaScript中判断数据类型的方法总结
May 24 Javascript
聊聊JavaScript如何实现继承及特点
Apr 07 Javascript
简单实现JavaScript弹幕效果
Aug 27 Javascript
如何在vue里添加好看的lottie动画
Aug 02 Javascript
Vue项目从webpack3.x升级webpack4不完全指南
Apr 28 Javascript
简述pm2常用命令集合及配置文件说明
May 30 Javascript
VUE 直接通过JS 修改html对象的值导致没有更新到数据中解决方法分析
Dec 02 Javascript
vue在图片上传的时候压缩图片
Nov 18 Vue.js
详解CocosCreator消息分发机制
Apr 16 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
实现 win2003 下 mysql 数据库每天自动备份
2006/12/06 PHP
PHP中的插件机制原理和实例
2014/07/08 PHP
php实现字符串反转输出的方法
2015/03/14 PHP
Zend Framework教程之资源(Resources)用法实例详解
2016/03/14 PHP
PHP读取Excel类文件
2017/05/15 PHP
PHP的HTTP客户端Guzzle简单使用方法分析
2019/10/30 PHP
JavaScript聚焦于第一个字段的代码
2010/10/15 Javascript
jquery常用技巧及常用方法列表集合
2011/04/06 Javascript
jQuery事件 delegate()使用方法介绍
2012/10/30 Javascript
Javascript判断对象是否相等实现代码
2013/03/18 Javascript
JQuery给元素添加/删除节点比如select
2013/04/02 Javascript
jQuery中使用animate自定义动画的方法
2016/05/29 Javascript
微信小程序 wx.uploadFile无法上传解决办法
2016/12/14 Javascript
Angular中$state.go页面跳转并传递参数的方法
2017/05/09 Javascript
JavaScript数组去重的几种方法
2019/04/07 Javascript
Python解析最简单的验证码
2016/01/07 Python
django2用iframe标签完成网页内嵌播放b站视频功能
2018/06/20 Python
python根据多个文件名批量查找文件
2019/08/13 Python
Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件封装函数的方法
2019/09/23 Python
Python try except else使用详解
2021/01/12 Python
Python开发.exe小工具的详细步骤
2021/01/27 Python
酷瑞网络科技面试题
2012/03/30 面试题
会计专业应届生自荐信
2014/02/07 职场文书
管事部库房保管员岗位职责
2014/02/21 职场文书
安全教育感言
2014/03/04 职场文书
手术室护士节演讲稿
2014/08/27 职场文书
2014乡镇党政班子四风问题思想汇报
2014/09/14 职场文书
领导班子“四风问题”“整改方案
2014/10/02 职场文书
有限责任公司股东合作协议书
2014/12/02 职场文书
接待员岗位职责范本
2015/04/15 职场文书
党员带头倡议书
2015/04/29 职场文书
电影建党伟业观后感
2015/06/01 职场文书
廉政党课工作报告案例
2019/06/21 职场文书
2019最新婚庆对联集锦!
2019/07/10 职场文书
基于Python实现射击小游戏的制作
2022/04/06 Python
方法汇总:Python 安装第三方库常用
2022/04/26 Python