ECMAScript有两种开发模式:1。功能表达(程序性);2.面向对象(OOP);
1.创建对象1。创建一个普通对象
//创建一个对象,然后赋予它新的属性和方法;var box=新对象();//创建一个对象对象;box.name=' lee//创建名称属性并赋值;box.age=100Box.run=function(){ //创建一个run()方法并返回值;返回此。命名此。年龄“运行中…”;} console . log(box . run());//输入属性和方法的值;//缺点:如果要创建类似的对象,会产生大量代码;2.在工厂模式下创建对象
//这个方法是为了解决实例化对象带来的大量代码重复的问题。函数体是在function createobject(名称,年龄){//;变量对象=新对象;//在函数体中创建对象;obj.name=name年龄=年龄;Obj。run=function(){ return this . name this . age ' running . ';};返回对象;} var box1=createObject('lee ',100);//实例化;调用函数并传递参数;var box2=createObject('jack ',200);//示例2;console . log(box 1 . run())box 2 . run());//实例保持相对独立;//缺点:对象和实例的识别;不可能知道它们是否是那个物体的实例;console . log(box 1的类型);//对象;3.构造函数创建一个对象
//ECMAScript使用构造函数(constructor)来创建特定的对象;函数框(名称、年龄){ //构造函数模式;this.name=name//这表示对象Boxthis.age=年龄;这个。run=function(){返回这个。说出这个。年龄'跑步.';};} var box1=new Box('lee ',100);//要创建对象的实例,必须使用新的运算符;var box2=新box('插孔',200);//Box1和Box2都是box对象的实例;console.log(box的box1实例);//true;明确标识box1从属于Box;//使用构造函数解决了重复实例化和对象识别的问题。使用构造函数和工厂模式的区别是:(1)。构造函数方法不显示新的对象;(2)直接给这个对象分配属性和方法;(3)没有退货单;1 //构造函数规范:(1)。函数Box和实例化构造函数名称相同且大写;(2).要通过构造函数创建实例对象,必须使用新运算符;
//构造函数与普通函数的区别: var box=new Box('lee ',100);//构建模式调用;方框(' lee ',200);//正常模式调用,无效;var o=新对象();Box.call(o,' jack ',200);//对象假装调用;//将Box对象的范围扩展到o对象;Box()方法的运行环境已被更改为对象O;构造函数问题:使用构造函数创建每个实例时,必须在每个实例上重新创建构造函数中的方法;因为ECMAScript中的函数是一个对象,所以每次定义函数时,都会实例化一个对象。以这种方式创建函数将导致不同的范围链和标识符解析;
两个原型//我们创建的每个函数都有一个原型属性,就是一个对象;
//Usage :包含可由特定类型的所有实例共享的属性和方法;
//了解:prototype是通过调用