zoukankan      html  css  js  c++  java
  • Javascripte的原型链之基础讲解

    一、函数对象与普通对象

    var o1 = {}; 
    var o2 =new Object();
    var o3 = new f1();
    
    function f1(){}; 
    var f2 = function(){};
    var f3 = new Function('str','console.log(str)');
    
    console.log(typeof Object); //function 
    console.log(typeof Function); //function  
    
    console.log(typeof f1); //function 
    console.log(typeof f2); //function 
    console.log(typeof f3); //function   
    
    console.log(typeof o1); //object 
    console.log(typeof o2); //object 
    console.log(typeof o3); //object
    在上面的例子中 o1 o2 o3 为普通对象,f1 f2 f3 为函数对象。怎么区分,其实很简单,凡是通过 new Function() 创建的对象都是函数对象,其他的都是普通对象。f1,f2,归根结底都是通过 new Function()的方式进行创建的。Function Object 也都是通过 New Function()创建的。
     
    二、那么原型对象是普通对象还是函数对象呢?答案是普通对象(但 Function.prototype 除外,它是函数对象,但它很特殊,他没有prototype属性)
     
    每个对象都有 __proto__ 属性,但只有函数对象才有 prototype 属性。
     
    prototype属性指向的是函数对象的原型对象,对象的__proto__属性是创建实例对象的时候对应的函数对象的原型对象。
     
    在默认情况下,所有的原型对象都会自动获得一个 constructor(构造函数)属性,这个属性(是一个指针)指向 prototype 属性所在的函数(Animal);
    function Animal(){}
    
    Animal.prototype.constructor===Animal
    //true
    var cat = new Animal()

    cat.constructor===Animal
    //true

    Animal.prototype.constructor===cat.constructor//true

      原型对象(Animal.prototype)是 构造函数(Animal)的一个实例。

    下面继续学习原型链高级篇
  • 相关阅读:
    zoj 3279 线段树 OR 树状数组
    fzu 1962 树状数组 OR 线段树
    hdu 5057 块状链表
    hdu3487 Play with Chain
    bzoj 1588营业额统计(HNOI 2002)
    poj2823 Sliding Window
    poj2828 Buy Tickets
    poj2395 Out of Hay
    poj3667 Hotel
    poj1703 Lost Cows
  • 原文地址:https://www.cnblogs.com/yiyi17/p/8454816.html
Copyright © 2011-2022 走看看