javascript---隐式原型--05

上一节中讲过javascirpt中每一个函数都有一个prototype属性,即原型对象,它是一个实例属性,这里补充一点,javascirpt中每一个对象都有一个属性__proto__,可称为隐式原型,隐式原型指向创建这个对象的函数的prototype

1 每个对象都有一个__proto__,函数是一个对象,函数的__proto__ 指向什么?

自定义函数的由 Function 创建,是javascirpt内置的函数,所以自定义函数的__proto__指向Function的prototype

    function Person(name, age, job) {
        this.name = name;
        this.age = age;
        this.job = job;
        this.sayName = sayName;
        this.sayName = function () {
            alert(this.name);
        };
    }
	Person.__proto__ === Function.prototype;//true
2 每个函数都有一个prototype属性,这个属性值是一个对象,即原型对象,那么函数的原型对象的__proto__指向什么?

实际上自定义函数的prototype对象是由Object创建的,以下代码验证:

Person.prototype.__proto__===Object.prototype; //true
3 Object是一个构造函数有prototype属性,js中函数是一个对象有__proto__属性,那么Object的__proto__指向什么?Object的原型(也是一个对象,对象都有一个__proto__属性)的__proto__指向什么?

1 Object由Function创建,对象的___proto__总是指向创建这个对象的原型,因此Object.__proto__指向Function.prototype

Object.__proto__===Function.prototype;//true

2 特别的,Object的原型的__proto__ 指向null,即 Object.prototype.__proto__指向null

Object.prototype.__proto__===null;//true
4 Function 也是一个函数,同样也是一个对象,有__proto__和prototype两个属性,那么

    //1  Function.__proto__===?
    // 由于Function是一个自建函数,Function的__proto__属性指向创建Function对象的函数的原型,
    // 因此Function的__proto__指向 Function自身的prototype
    Function.__proto__===Function.prototype;//true
    
  //2 Function.prototype.__proto__===?
  // Function的原型本质上都是由Object创建,所以
  Function.prototype.__proto__===Object.prototype;//true
5 所有的引用类型都默认继承了Object,而 函数的prototype是一个实例属性,因此所有函数的默认原型都是Object的实例
即: 任意函数.prototype.__proto__===Object.prototype; //true

猜你喜欢

转载自blog.csdn.net/weixin_40719943/article/details/106648914