基于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 相关文章推荐
iframe如何动态创建及释放其所占内存
Sep 03 Javascript
快速掌握Node.js模块封装及使用
Mar 21 Javascript
js实现PC端和移动端刮卡效果
Mar 27 Javascript
教你用十行node.js代码读取docx的文本
Mar 08 Javascript
教你快速搭建Node.Js服务器的方法教程
Mar 30 Javascript
利用JQuery操作iframe父页面、子页面的元素和方法汇总
Sep 10 jQuery
JS实现百度搜索接口及链接功能实例代码
Feb 02 Javascript
浅谈vue.js导入css库(elementUi)的方法
Mar 09 Javascript
React Form组件的实现封装杂谈
May 07 Javascript
ES10的13个新特性示例(小结)
Sep 23 Javascript
详解为element-ui的Select和Cascader添加弹层底部操作按钮
Feb 07 Javascript
jquery实现图片放大镜效果
Dec 23 jQuery
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语法(1)
2006/10/09 PHP
thinkphp控制器调度使用示例
2014/02/24 PHP
PHP curl 抓取AJAX异步内容示例
2014/09/09 PHP
php实现的简单中文验证码功能示例
2017/01/03 PHP
Laravel框架实现修改登录和注册接口数据返回格式的方法
2018/08/17 PHP
PHP yield关键字功能与用法分析
2019/01/03 PHP
php实现登录页面的简单实例
2019/09/29 PHP
仅用[]()+!等符号就足以实现几乎任意Javascript代码
2010/03/01 Javascript
JavaScript 高级篇之闭包、模拟类,继承(五)
2012/04/07 Javascript
又一款js时钟!transform实现时钟效果
2016/08/15 Javascript
Js apply方法详解
2017/02/16 Javascript
使用JS获取SessionStorage的值
2018/01/12 Javascript
node将geojson转shp返回给前端的实现方法
2019/05/29 Javascript
超轻量级的js时间库miment使用解析
2019/08/02 Javascript
vue实现输入框的模糊查询的示例代码(节流函数的应用场景)
2019/09/01 Javascript
在Vue项目中,防止页面被缩放和放大示例
2019/10/28 Javascript
基于vue实现图片验证码倒计时60s功能
2019/12/10 Javascript
JavaScript实现页面高亮操作提示和蒙板
2021/01/04 Javascript
python在多玩图片上下载妹子图的实现代码
2013/08/13 Python
python连接字符串的方法小结
2015/07/13 Python
Python3使用正则表达式爬取内涵段子示例
2018/04/22 Python
python pandas.DataFrame选取、修改数据最好用.loc,.iloc,.ix实现
2018/06/11 Python
Python爬取个人微信朋友信息操作示例
2018/08/03 Python
python3字符串操作总结
2019/07/24 Python
推荐一些比较有用的css3新属性
2014/11/11 HTML / CSS
AmazeUI折叠式卡片布局,整合内容列表、表格组件实现
2020/08/20 HTML / CSS
倩碧美国官网:Clinique美国
2016/07/20 全球购物
德国二手设计师时装和复古时装跳蚤市场:Mädchenflohmarkt
2020/11/09 全球购物
护理专业学生的求职信范文
2013/12/11 职场文书
公司任命书模板
2014/06/06 职场文书
路政管理求职信
2014/06/18 职场文书
2014应届本科生自我评价
2014/09/13 职场文书
幼儿园辞职书
2015/02/26 职场文书
小学毕业教师寄语
2019/06/21 职场文书
PHP基本语法
2021/03/31 PHP
java实现web实时消息推送的七种方案
2022/07/23 Java/Android