//1.构造函数的属性A(name){this.name=name//实例的基本属性(该属性强调私有,不强调共享)this.arr=[1]//实例的引用属性(该属性强调私有性,不共享)this.say=function(){//实例的引用属性(该属性强调复用,需要共享)console.log('hello')}}//数组和方法都属于实例的引用属性数组,强调private不共享。方法需要复用和共享//在构造函数中,很少有数组形式的引用属性,大部分都是基本的属性和方法//2.什么是原型对象//简单的说,每个函数都有a原型属性,他就是原型对象//通过函数实例化的对象都有一个_proto_属性,指向原型对象。leta=newA()console.log(a)A的实例对象console.log(a._proto_)constructorconsole.log(A.prototype)console.log(A.prototype===a._proto_)true//构造函数:?A(name)//arguments:null//caller:null//length:1//name:"A"//prototype:{constructor:?}//__proto__:?()//[[FunctionLocation]]:index.js:12//[[Scopes]]:Scopes[2]//__proto__:Object//3.原型对象的作用/***原型对象的作用是存储和共享对于每个实例的方法和属性,*是一个普通对象,所有实例共享一个原型对象*因此,不同于实例的方法或属性,原型对象只有一份,而实例可以有多份*并且实例的属性和方法是独立的。**在构造函数中,为了属性的隐私性和方法的可重用性,我们提倡**1.将属性封装到构造函数中*2、在原型对象上定义方法**/functionA(name){this.name=name//实例的基本属性(该属性强调私有,不共享)this.arr=[1]//实例的引用属性(该属性强调私有,不共享)//this.say=function(){//实例的引用属性(该属性强调重用,需要共享)//console.log('hello')//}}A.prototype.say=function(){//定义在原型对象上的方法(强调重用,需要分享)console.log('hello')}
