JS中有两个特殊的对象:Object与Function,它们都是构造函数,用于生成对象。

Object.prototype是所有对象的祖先,Function.prototype是所有函数的原型,包括构造函数。

可以将JS的对象分为三类:用户创建对象,构造函数对象,原型对象。

所有对象中都有一个__proto__属性,其指向此对象的原型。

构造函数对象有prototype,指向其原型对象,通过此构造函数创建对象时,新创建对象的__proto__属性将会指向构造函数的prototype属性。

function Person(){};
var person=new Person();
console.log(person.__proto__)   // Person {}
console.log(Person.prototype)   // Person {}

原型对象有一个constructor属性,指向它对应的构造函数。

console.log(person.constructor)  //function Person(){}

每个构造函数都有一个prototype属性,这个属性是一个指针,指向一个prototype对象,它是显示修改对象的圆形的属性

prototype  不能用在实例上,否则会编译错误

每个prototype对象都有一个constuctor属性,这个constructor属性同样指向一个constructor对象,而这个constructor对象恰恰就是这个function函数本身

function Person(){};
var person=new Person();
console.log(person instanceof Person)              //true  person 是否是Person的实例
console.log(Person instanceof Function)            //true  Person 是否是 Function的实例
console.log(Person.prototype == person.__proto__)  //true

console.log(Function.__proto__)  //function Empty(){}
console.log(Function.prototype)  //function Empty(){}

console.log(Object.__proto__)    //function Empty(){}
console.log(Object.prototype)    //Object {}

console.log(Array.__proto__)    //function Empty(){}
console.log(Array.prototype)    //[Symbol(Symbol.unscopables): Object]   

console.log(person.__proto__)    //Person {}
console.log(Person.prototype)    //Person {}
console.log(person.constructor)  //function Person(){}
    function Person() {}
    var p1 = new Person();

    console.log(Person.prototype)     //Person {}             每个构造函数都有一个prototype属性,指向一个prototype对象
    console.log(p1.constructor)       //function Person(){}   原型对象有一个constructor属性,指向它对应的构造函数。
    console.log(p1 instanceof Person) //true                  p1 是否是Person的实例

js prototype __proto__ instanceof constructor的更多相关文章

  1. 深入理解JavaScript原型:prototype,__proto__和constructor

    JavaScript语言的原型是前端开发者必须掌握的要点之一,但在使用原型时往往只关注了语法,其深层的原理并未理解透彻.本文结合笔者开发工作中遇到的问题详细讲解JavaScript原型的几个关键概念, ...

  2. 再次理解JS的prototype,__proto__和constructor

    个人总结: 下面这篇文章很好的讲解了js原型,原型链,个人的总结是要记住这三个属性 prototype.__proto__和constructor 首先明确,js中一切都是对象object(A). ( ...

  3. 夯实JavaScript基础之prototype, __proto__, instanceof

    function New(f){ return function(){ var o = {'__proto__': f.prototype}; f.apply(o, arguments); retur ...

  4. Js中Prototype、__proto__、Constructor、Object、Function关系介绍

    一. Prototype.__proto__与Object.Function关系介绍 Function.Object:都是Js自带的函数对象.prototype,每一个函数对象都有一个显式的proto ...

  5. 帮你彻底搞懂JS中的prototype、__proto__与constructor(图解)

    作为一名前端工程师,必须搞懂JS中的prototype.__proto__与constructor属性,相信很多初学者对这些属性存在许多困惑,容易把它们混淆,本文旨在帮助大家理清它们之间的关系并彻底搞 ...

  6. js——prototype、__proto__、constructor

                                       Object                                    1. Object是一个函数(typeof O ...

  7. js高级——构造函数,实例对象和原型对象——prototype、__proto__和constructor构造器

    一.前言 了解JavaScript面向对象,需要先了解三个名词: 构造函数,实例对象和原型对象. 注意:JavaScript中没有类(class)的概念,取而代之的是构造函数,两者类似却又有很大的差别 ...

  8. 【转】Js中Prototype、__proto__、Constructor、Object、Function关系介绍

    一    Prototype.__proto__与Object.Function关系介绍        Function.Object:Js自带的函数对象.         prototype,每一个 ...

  9. JS中的prototype、__proto__与constructor属性

    作为一名前端工程师,必须搞懂JS中的prototype.__proto__与constructor属性,相信很多初学者对这些属性存在许多困惑,容易把它们混淆,本文旨在帮助大家理清它们之间的关系并彻底搞 ...

随机推荐

  1. jQuery 属性操作和CSS 操作

    如有在jQuery方法中涉及到函数,此函数必定会返回一个数值(函数由于运行次数不同触发一些不同效果) jQuery 属性操作方法(以下方法前些日子学习过,不再赘述) addClass() attr() ...

  2. JavaScript 兼容处理IE67之 !"a"[0]

    IE67对字符串进行取值需要使用charAt()方法,不能直接通过数组方式的坐标访问: <!DOCTYPE html> <html> <head> <meta ...

  3. Ural 1258 镜面对称

    #include<cstdio> #include<cstring> #include<cmath> #include<iostream> #inclu ...

  4. UVa 11825 集合dp

    #include <cstdio> #include <cstring> #include <iostream> #include <cmath> #i ...

  5. 外显子分析:cutadapt,去除序列adapter详细解析

    外显子测序时带有adapt接头,因此我们需要去除adapt接头,cutadapt的作用是去除adapt接头,一般用到如下命令: cutadapt -a AACCGGTT -o output.fastq ...

  6. Qt 线程基础(Thread Basics的翻译,线程的五种使用情况)

    Qt 线程基础(QThread.QtConcurrent等) 转载自:http://blog.csdn.net/dbzhang800/article/details/6554104 昨晚看Qt的Man ...

  7. thinkphp中使用PHPEXCEL导入数据

    导入方法比较简单 但必须考虑到Excel本身单元格格式问题 例如以0开头的字符串读出来被去掉了前导0 成为float型而丢失一位 必须进行处理 <?php /** * Author lizhao ...

  8. 【Android - MD】之TextInputLayout的使用

    TextInputLayout是Android 5.0新特性--Material Design中的一个布局控件,主要用来嵌套EditText,实现数据输入时的一些效果,如: 当输入框获取焦点时,输入提 ...

  9. NDK安装 eclipse 不出现NDK目录问题

    android adt自带eclipse无法设置ndk路径 具体情况是 我在mac上搭建android环境 到android sdk官网下载r23版本的adt时自带的eclipse没有设置ndk路径的 ...

  10. css考核点整理(十三)-jpg/png/gif等图片类型区别

    jpg/png/gif等图片类型区别