JavaScript中的原型对象

55 阅读2分钟

JavaScript:原型prototype:我们在创建每个函数都有一个prototype属性 这个属性是一个指针,指向一个对象,这个对象就是我们所谓的原型对象

1.如果函数作为普通函数调用prototype没有任何作用, 当函数以构造函数形式调用时,他所创建的对象中都会有一个隐含的属性,指向该构造函数的原型对象,我们可以用__proto__来访问该属性

        //(prototype创建属性, __proto__访问)
        function MyClass() {
        }
        //向MyClass函数的原型中添加属性a
        MyClass.prototype.a = "周杰伦"
        // 向MyClass函数的原型中添加一个方法
        MyClass.prototype.fun = function() {
            alert("邓紫棋")
        }
        //当以构造函数调用时,对象中都会有一个隐含的属性
        //,指向原型对象 我们可以用__proto__来访问该属性 
        var b = new MyClass();
        //所以 prototype和__proto__都指向原型
        console.log(MyClass.prototype == b.__proto__) //ture
       //因为MyClass.prototype和b.__proto__都指向同一个原型对象
       //,所以 MyClass.prototype添加的属性A和fun方法,b.__proto__都能访问到 
        console.log(b.__proto__.a)  //周杰伦
        console.log(b.__proto__.fun) //= function() {
           // alert("邓紫棋")
       // }

2.原型对象就相当于一个公共的区域,所有同一个类的实例,都可以访问到这个原型对象,我们可以将对象中共有的内容,存放到到原型对象中

        function MyClass() {
        }
        //向MyClass函数的原型中添加属性a
        MyClass.prototype.a = "周杰伦"
        //实例对象b
        var b = new MyClass();
         //所以 prototype和__proto__都指向原型
        console.log(MyClass.prototype == b.__proto__) //ture
        console.log(b.__proto__.a)  //周杰伦
        
        //实例对象c
        var c = new MyClass();
        console.log(MyClass.prototype == c.__proto__) //ture
        console.log(c.__proto__.a)  //周杰伦

总结. 以后我们创建构造函数时,可以将这些对象共有的属性和方法,统一添加到构造函数的原型对象中,这些不用分别为每个对象添加,也不会影响到全局作用域,就可以是每个对象都具有这些属性和方法了