原型(2)------------自我理解

接上一篇原型(1)------------自我理解

以下是我自己对自定义函数,内置构造函数Object()、Function(),原型prototype与__proto__它们的联系的理解:

Js里有许多内置的构造函数,例如:Object(),Function(),Date(),Array()等

1. 每个对象都有一个__proto__属性,该属性指向创建这个对象的函数的prototype。 (这里就没管IE,直接用__proto__属性,这样好理解一点)

2. 每个函数都有一个prototype属性,该属性是一个对象,对象有__proto__属性。对象都是被Object()函数创建,所以函数的__proto__属性值指向Object.prototype。 即 函数.prototype.__proto__===Object.prototype

3. 函数也是对象,也有__proto__属性值,该值指向创建它函数的prototype值,它是被Function()创建。所以函数的prototype属性指向Function的prototype

4. 所有函数都是被Function()内置构造函数所创建

5. 所有对象都是被Object()内置构造函数所创建

6. 通过Object.create(null)创建的对象是没有原型链的

7. Object()也是函数,函数也是对象有__proto__,函数是被Function()函数所创建。因此Object.__proto__===Function.prototype

8. Object是函数,也有prototype属性,该属性是个对象,也有__proto__属性,但是Object.prototype.__proto__===null

9. Function()是函数,函数也属于对象,它是被它自身所创建,所以Function.__proto__===Function.prototype

10. Function()是函数,也有prototype属性,该属性是个对象,也有__proto__属性,对象都是被Object()函数创建,所以它的__proto__属性指向Object.prototype。所以Function.prototype.__proto__===Object.prototype

还是写个例子:

  function Fn(){};//是否大写我一直纠结。为了规范,fn还是首字母大写,毕竟是作为构造函数用。

  var a=new Fn();  

    1) a是一个被Fn构造函数创建的对象,对象有__proto__,所以a.__proto__===Fn.prototype

    2) Fn是个函数,函数也属于对象,也有__proto__,Fn它是被Function()函数所创建,所以Fn.__proto__===Function.prototype

    3) Fn.prototype也是一个对象,对象有__proto__属性值,对象都是被Object()函数所创建,所以Fn.prototype.__proto__===Object.prototype

    4) Object()是个函数,所以它是被Function()所创建,所以Object.__proto__===Function.prototype

    5) Object是函数,也有prototype属性,该属性是个对象,也有__proto__属性,但是Object.prototype.__proto__===null   这里需要注意

    6) Function()是函数,函数也属于对象,它是被它自身所创建,所以Function.__proto__===Function.prototype

    7) Function()是函数,也有prototype属性,该属性是个对象,也有__proto__属性,对象都是被Object()函数创建,所以Function.__proto__===Function.prototype

再贴一张王福鹏老师的图片就更好理解了:

so,如果面试被问到原型是什么,就答:在JavaScript中原型是一个prototype对象,用于表示类型之间的关系。

原文地址:https://www.cnblogs.com/zjjDaily/p/8297852.html

时间: 2024-11-10 08:12:16

原型(2)------------自我理解的相关文章

原型(1)------------自我理解

什么是原型? 每一个js对象都和另外一个对象关联,这另外个对象就是“原型”----------js权威指南....哈???这就叫原型啊???excuse me??? 只要创建了一个新函数,就会为该函数创建一个prototype(原型)属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法-----------js高级程序设计....嗯,,,,嗯????? 来创建个对象: function Person(){};  //创建函数 var person

对原型链的理解 语言表达能力不好 直接用代码,哈

分享一下 我对原型和原型链的理解 原型对象: function People(nameValue,ageValue,fondValue)            {                this.name = nameValue;                this.age = ageValue;                this.fond = fondValue;            } People.prototype.rule = function()         

谈谈对Javascript构造函数和原型对象的理解

对象,是javascript中非常重要的一个梗,是否能透彻的理解它直接关系到你对整个javascript体系的基础理解,说白了,javascript就是一群对象在搅..(哔!). 常用的几种对象创建模式 使用new关键字创建最基础的对象创建方式,无非就是和其他多数语言一样说的一样:没对象,你new一个呀! var gf = new Object(); gf.name = "tangwei"; gf.bar = "c++"; gf.sayWhat = function

Java内部类的自我理解

本文借鉴网络上多位大牛的博客和文章,感谢各位不知名人士的分享. 一.什么事内部类? 内部类是指在一个外部类的内部再定义一个类.内部类作为外部类的成员,并且依附于外部类而存在的.内部类可以为静态,可用protected和private修饰(而外部类只能使用public和缺省的包访问权限).内部类主要有以下几类:成员内部类.局部内部类.静态内部类和匿名内部类. 二.需要内部类? 典型的情况是,内部类继承自某个类或实现某个接口,内部类的代码操作创建其的外围类的对象.所以你可以认为内部类提供了某种进入其

对Javascript中原型的深入理解

  理解原型对象 在Javascript中无论什么时候,只要创建一个新的函数,就会根据一组特定的规则为该函数创建一个prototype属性,这个属性指向函数的原型对象(这个对象的用途是包含可以有特定类型的所有实例共享的属性和方法).如果按照字面上的意思来理解,那么原型属性就是通过调用构造函数而创建的那个对象的实例的原型对象. 在默认的情况下,所有的原型对象都会自动获得一个constructor(构造函数)属性,这个属性包含一个指向prototype属性所在函数的指针.如下图 function P

原型链的理解

### 原型链的理解 #### 概念 + javascript每一个对象**包括原型对象**都有一个内置的`proto`属性指向创建他的函数对象的原型对象,即`prototype`属性 #### 作用 + 实现对象的继承 ### 理解 1.函数对象 + 在javascript中,函数就是对象 2.原型对象 + 当定义一个函数对象的时候,会包含一个预定的属性,`prototype`,这就属性称之为原型对象 3.\__proto__ + javascript 在创建对象的时候,都会有一个\_prot

面向对象(2 )构造函数 原型 原型链的理解

面向对象(2) 原型 原型链的理解 1.面向对象的目的就是生成对象object. 2.生成对象的方式 (1)单例模式(字面量定义)var obj={} (2)类的实例 var obj=new Object() (3)工厂模式 (4)构造函数 工厂模式和构造函数的区别? 工厂模式,生成的对象必须要返回,构造函数模式不用return,构造函数模式默认return旳是this,在构造函数内的this就是实例对象. 构造函数如果人为return的不是对象,直接忽略,如果人为return的是对象,就取代t

javascript关于原型的深刻理解

Javascript继承机制的设计思想 作者: 阮一峰 日期: 2011年6月 5日 我一直很难理解Javascript语言的继承机制. 它没有"子类"和"父类"的概念,也没有"类"(class)和"实例"(instance)的区分,全靠一种很奇特的"原型链"(prototype chain)模式,来实现继承. 我花了很多时间,学习这个部分,还做了很多笔记.但是都属于强行记忆,无法从根本上理解. 直到昨天,

JS原型链的理解

<JavaScript高级程序设计>是一本好书,下面总结一下书中关于原型链的讲解. 本文从对象的创建开始,逐渐引出原型链的背景.作用以及ECMA对原型链的定义1.理解对象两种常用的创建对象的方法之一是new一个Object对象,并为它添加属性和事件var person = new Object();person.name = "wzk";person.age = 24;person.sayName = function(){ alert(this.name);}; 另一种是