JS-原型链--函数与对象的关系

1.Function函数是所有函数的祖先函数
2.所有构造函数都有一个prototype属性
在JavaScript中,原型也是一个对象,用原型可以实现对象的属性继承,JavaScript的对象中都包含了一个"prototype"内部属性,
这个属性对应的就是该对象的原型,作为对象的内部属性,"prototype"是不能直接访问的,所以为了方便查看对象的原型,Firefox和chrome内核
的JavaScript引擎中提供了"proto"这个非标准的访问器
3.所有原型对象都有一个constructor属性
4.所有函数都是对象
5.所有对象都有一个__proto_属性

    function Person(myName, myAge) {
    
    
        this.name = myName;
        this.age = myAge;
        this.currentType = "构造函数中的type";
        this.say = function () {
    
    
            console.log("构造函数中的say");
        }
    }
    Person.prototype = {
    
    
    	//为了不破坏原有的关系,在给prototype赋值的时候,需要在自定义的对象中手动添加constructor属性,手动的指定需要指向谁
    	constructor:Person,
        currentType : "人",
        say:function () {
    
    
            console.log("hello world");
        }
    }
    let obj1 = new Person("smh",22);
    obj1.say();

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

prototype特点:
1.存储在prototype中的方法可以被对应构造函数创建出来的所有对象共享
2.prototype中除了可以存储方法以外,还可以存储属性
3.prototype如果出现了和构造函数中同名的属性或者方法,对象在访问的时候,访问到的是构造函数中的数据

prototype应用场景
prototype中一般情况下用于存储所有对象都相同的一些属性和方法
如果是对象特有的属性或者方法,我们都会存储到构造函数中

//注意点:
为了不破坏原有的关系,在给prototype赋值的时候,需要在自定义的对象中手动添加constructor属性,手动的指定需要指向谁
constructor:Person,

原型链
JavaScript中每个对象都有一个prototype属性,称为原型,而原型对象中__proto__组成的链条我们称之为原型链,原型链的链头是object,
他的值为null
原型链的作用是对象继承,函数person的原型属性(prototype property)是一个对象,当把这个函数作为构造函数来创建实例的时候,该函数的原型属性将作为原型赋值给所有对象实例,比如新建一共数组,数组的方法便从数组的原型上继承而来。
当访问对象的一个属性时,首先查找对象本身,若自己有就用自己的,自己没有就用原型对象的,一直沿着原型链向上找,只要没被覆盖,对象原型的属性就能在所有的实例中找到,若整个原型链都未找到,则返回undefined
注意点:在给一个对象不存在的属性设置值的时候,不会去原型对象中查找,如果当前对象没有就会给当前对象新增一共不存在的属性
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/mhblog/article/details/114413414
今日推荐