基于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 图片上传预览-兼容标准
Jun 01 Javascript
经典海量jQuery插件 大家可以收藏一下
Feb 07 Javascript
计算新浪Weibo消息长度(还可以输入119字)
Jul 02 Javascript
获得Javascript对象属性个数的示例代码
Nov 21 Javascript
Jquery简单分页实现方法
Jul 24 Javascript
javascript实现五星评价代码(源码下载)
Aug 11 Javascript
20分钟打造属于你的Bootstrap站点
Jul 27 Javascript
jQuery纵向导航菜单效果实现方法
Dec 19 Javascript
vue图片加载与显示默认图片实例代码
Mar 16 Javascript
微信小程序自动客服功能
Nov 02 Javascript
JS使用百度地图API自动获取地址和经纬度操作示例
Apr 16 Javascript
基于redis的小程序登录实现方法流程分析
May 25 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结合飞信 免费天气预报短信
2009/05/07 PHP
IIS6+PHP5+MySQL5+Zend Optimizer+phpMyAdmin安装配置图文教程 2009年
2009/06/08 PHP
PHP安全配置详细说明
2011/09/26 PHP
PHP curl 获取响应的状态码的方法
2014/01/13 PHP
PHP中ini_set和ini_get函数的用法小结
2014/02/18 PHP
PHP把JPEG图片转换成Progressive JPEG的方法
2014/06/30 PHP
PHP读取txt文本文件并分页显示的方法
2015/03/11 PHP
php生成数字字母的验证码图片
2015/07/14 PHP
Laravel5中Cookie的使用详解
2017/05/03 PHP
项目实践一图片上传之form表单还是base64前端图片压缩(前端图片压缩)
2016/07/28 Javascript
JavaScript中的call和apply的用途以及区别
2017/01/11 Javascript
详解基于mpvue的小程序markdown适配解决方案
2018/05/08 Javascript
Node.js如何优雅的封装一个实用函数的npm包的方法
2019/04/29 Javascript
浅析Vue下的components模板使用及应用
2019/11/27 Javascript
Vue.js的模板语法详解
2020/02/16 Javascript
Vue.js中Line第三方登录api的实现代码
2020/06/29 Javascript
python编写朴素贝叶斯用于文本分类
2017/12/21 Python
python3连接MySQL数据库实例详解
2018/05/24 Python
Django进阶之CSRF的解决
2018/08/01 Python
利用Pyhton中的requests包进行网页访问测试的方法
2018/12/26 Python
Python+OpenCV图片局部区域像素值处理改进版详解
2019/01/23 Python
Python配置虚拟环境图文步骤
2019/05/20 Python
Python 进程之间共享数据(全局变量)的方法
2019/07/16 Python
django rest framework vue 实现用户登录详解
2019/07/29 Python
python利用itertools生成密码字典并多线程撞库破解rar密码
2019/08/12 Python
python3 selenium自动化测试 强大的CSS定位方法
2019/08/23 Python
Python3 pywin32模块安装的详细步骤
2020/05/26 Python
python访问hdfs的操作
2020/06/06 Python
Django url 路由匹配过程详解
2021/01/22 Python
西班牙汉普顿小姐:购买帆布鞋和太阳镜
2016/10/23 全球购物
瑞士设计师家具和家居饰品网上商店:Bruno Wickart
2019/03/18 全球购物
新加坡交友网站:be2新加坡
2019/04/10 全球购物
员工工作表扬信范文
2014/01/13 职场文书
2015年招商引资工作总结
2015/04/25 职场文书
面试必问:圣杯布局和双飞翼布局的区别
2021/05/13 HTML / CSS
排查MySQL生产环境索引没有效果
2022/04/11 MySQL