console.log(` 1.创建一个空对象 2.让this 指向刚刚创建好的空对象 3.执行构造函数内的代码 (为相关的属性和方法赋值) 4.返回创建好的对象`) // 1.创建一个空对象 // 2.让this 指向刚刚创建好的空对象 // 3.执行构造函数内的代码 (为相关的属性和方法赋值) // 4.返回创建好的对象 // new 一个对象的过程 就是实例 function Person(name,age){ this.name = name this.age = age } // info 属性,直接挂载给了构造函数,所以它是静态属性 Person.info = 'aaaa' //实例方法 Person.prototype.say = function(){ console.log("这是Person的实例方法"); } Person.show = function(){ console.log("这是Person的静态show方法"); } const p1 = new Person("许三多",18) console.log(p1)//实例属性 console.log(Person.info);//静态属性 //通过 new 出来的实例,访问到的属性,叫做[实例属性] //通过构造函数,直接访问到的属性,叫做[静态属性] console.log(p1.name); p1.say();//实例方法 Person.show();//静态方法 console.log('=================class==================='); // // 实例成员:使用实例对象(实例)来调用的属性和方法(只能使用new创建出来的对象) // 静态成员:只能使用构造函数名进行 调用和 创建的 属性或者方法 // class ---------------------------------------------------- //创建一个动物类 // 注意1:在 class 的 { } 区间内,只能写 构造器、静态方法和静态属性、实例方法 // 注意2:class 关键字内部,还是用 原来的配方实现的;所以说,我们把 class 关键字,称作 语法糖; class Animal { //这是勒种的构造器 //每个类中都有一个构造器如果程序员没有手动指定构造器,那么,可以认为类内部有一个隐形的构造器 //类似如: constructor(){} // 构造器的作用,就是,每当 new 这个类的时候,必然会优先执行 构造器中的代码 constructor(name,age){ //实例属性 this.name = name this.age = age } // 在 class 内部,通过 static 修饰的属性,就是静态属性 static info = "eeeee" static show(){ console.log("这是动物的静态方法"); } wow(){ console.log("动物的实例方法"); } } const a1 = new Animal("黄",3) console.log(a1); console.log(a1.name);//实例属性 a1.wow();//实例方法 console.log('===================================='); console.log(Animal.info);//info 是Animal静态属性 Animal.show(); console.log('====================================');
class Animal { constructor(name,age){ //实例属性 因为这些通过this挂载的属性,都是通过new出来的实例访问的 this.name = name this.age = age } //实例方法 say(){ console.log('实例say方法') } //-------------------------------------------------- //如果要定义静态属性,则需要和constructor,并且这个属性需要被static关键字修饰 //静态属性的定义:无法通过实例访问,只能通过类名的访问 static info = { address:"上海", location:"宝山" } static show(){ console.log("静态的show方法") } } const a1 = new Animal("小黄",2) console.log(a1) console.log(a1.name)//通过实例直接访问的实例属性 a1.say()//通过 实例,直接访问实例方法 实例的挂载在__proto__ console.log('===================================='); console.log(Animal.info)//通过类名,直接访问静态属性 Animal.show()//通过类名,直接访问静态方法 // 实例的 属性 或 方法,都是 通过 new 出来的实例对象来访问的; // 静态的属性 或方法,都是 直接通过 类名 来访问的;(表现形式:通过 static 来修饰)