javascript中一切皆对象,比如:Array,Date.....这些都是对象。javascript中没有class的定义,function既是定义函数,也可以是定义类。function Obj(){}可以是定义了一个Obj函数,也可以是定义了一个Obj类。 既function obj(){}为最简单的创建类。
一下案例演示的截图来自Nodejs的命令行,不懂Nodejs不影响阅读
JS中构建类的最基本方法:
/*最基本类的定义*/ function person(){ this.age; //定义类属性 }; var p_1 = new person(); //根据已定义类创建对象 p_1.name = "Tom"; //对象动态赋值属性 p_1.age = 18; //属性赋值 /*输出对象属性值*/ console.log("His name is " + p_1.name + " " + p_1.age + " years old this year.");
*****************************************************************************************************************
工厂创建对象:
抽取一类对象共有的属性,方法封装成一个工厂方法(函数)。
工厂就好比一个模具,通过工厂这个模具创建多个对象。
/*创建工厂*/ function createPet(name,color){ var pet = new Object(); //创建对象 pet._name = name; //创建对象属性 pet._color = color; /*创建对象方法*/ pet.sayHi = function(){ console.log("一只" + pet._color + pet._name + "向你问好!"); } return pet; //返回一个对象 } var cat = createPet("猫咪","白色"); //用工厂创建对象 cat.sayHi(); //调用对象方法 var dog = createPet("小狗","黑色"); dog.hobby = "吃骨头"; //创建该对象特有属性 dog.sayHi(); console.log(dog.hobby);
工厂创建对象缺点:
每次创建一个新对象,都需要调用一次工厂方法,有些浪费内存。
*****************************************************************************************************************
原型与原型链:
prototype原型对象(原型类)。原型对象(原型类)prototype可以理解为一个抽象类,是由prototype原型对象(原型类)创建的所有对象的抽象类。
function person(){ this.name = "stu_name"; } //创建person类 person.prototype.profession = "student"; //创建person类原型属性,并赋值 var tea = new person(); //创建对象 tea.name = "teach"; //重新赋值name属性 tea.profession = "teacher"; //重新赋值profession属性 console.log(tea.name + " " + tea.profession); //输出内容
- prototype定义的属性属于原型对象(原型类)。
- prototype属性只能通过原型对象(原型类)修改其值,不可通过原型对象(原型类)创建出来的对象修改prototype属性。
- prototype属性一旦修改则会影响所有通过该原型对象(原型类)创建出来的对象。