美文网首页
js高级 第一章

js高级 第一章

作者: 摩西摩西啊 | 来源:发表于2017-04-19 20:44 被阅读0次

JS面向对象编程

一、什么是面向对象思想(编程思想角度)?

   现有的两种程序思想:面向过程和面向对象

1.面向过程: 关注的是解决问题的步骤;

      ①优点:在小型程序中代码量比较少,开发成本低

      ②缺点:在构建大型项目时,代码逻辑不易捋顺,代码量大,增加开发难度。

2.面向过程:关注的是解决问题所需要的对象;

      ①优点:有效弥补了面向过程编程思想的不足

      ②缺点:在小型程序中不如面向过程思想灵活、方便

二、什么是面向对象语言(编程语言角度)?

 面向对象的编程语言,必须有“类”和“对象”这两个概念。并且对象是经由类创建出来的;还需要有封装、继承、多态三个特征(如:Java语言)

js和面向对象的关系:

      js不符合以上条件,但是有“对象”的概念,所以说js是一门基于对象的编程语言,利用面向对象编程思想来指导js代码的书写方式。

三、js如何创建对象?

1.通过字面量的方式创建

//创建一个对象 包含name、age属性 和sayHi方法

   var per = {

         name :'xiaoWang',

         age:18,

         sayHi: function(){

                alert('hello');

          }

};

//访问对象的属性

alert(per['name']);

per.sayHi();

>>优势:快捷、直观、方便

>>劣势:需要创建多个对象时,代码冗

2.工厂模式创建对象:通过调用工厂,给工厂传递参数,则该工厂就能批量生产对应的产品。

//  定义创建对象的工厂

function creatPerson(name, age) {

// 创建空对象

var per = {};

// 给空对象添加属性和方法

    per.name = name;

    per.age = age;

    per.sayHi = function () {

          alert(name +'hello')

     }

// 把创建的对象返回出去

return per;

}

var per1 = creatPerson('xiaoWang', 23);

console.log(per1);

//可以通过instanceof 方法判断实例的类型

console.log(per1 instanceof creatPerson);

>>优势:解决了了代码冗余的问题;

>>劣势:无法区分该对象的类型(如:

系统类型,如number是Number()创建的,但是自定义类型无法获取到)

3.通过构造函数创建对象(函数名首字母大写)

function CreatePreson(name, age) {

// 把所有的属性和方法挂载在this指针上。将来this指向谁,这些属性和方法就添加在谁身上

    this.name = name;

    this.age = age;

    this.sayHi = function () {

        alert(this.name + 'hello');

    };

}

//  调用构造函数创建对象

//  new + 构造函数名

//  new:通过new关键字调用的函数,new会首先在内存中开辟一块存储空间,然后把构造函数中的this指针指向这块存储空间,这样给this指针绑定的属性、方法,也就添加进了这块存储空间中。最后把存储空间的地址给per对象保存

//  通过构造函数创建出来的对象可以借助相关方法判断归属关系。

var per1 = new CreatePreson('xiaoXuan', 18);

per1.sayHi();

console.log(per1 instanceof CreatePreson);

>>优势:解决了了获取对象类型的问题,使用构造函数创建的对象自带一个constructor,通过该属性获取对象的类型(还可以使⽤用instanceof检测对象是那个一个类型的实例例:(personinstanceof Person),返回一个布尔值 )

>>劣势:内存占用有点大

总结 :

1.工厂模式和构造函数创建对象的区别:

①在函数中没有显式的创建新对象;

②直接把属性、方法赋值给了了this指针;

③没有return语句

④使用构造函数创建出来的对象可以标识这个对象属于哪一种类型

2.普通函数调用和构造函数调用的区别:

必须使用new操作符来创建新对象,如果像调用普通函数那样创建对象,就是在全局作用域中调用函数了,this指针会指向window对象

四、如何使用对象?

1.点语法和[ ]访问某一个属性

方法一:对象名+'.'+属性名

例:alert(per.name); 

方法二:对象名+[  ]+属性名字符串

alert(per['name']);

2.删除属性

delete per2.name;

小练习

定义一个求平方的对象,输入一个数字,输出这个数字的平方值

//通过字面量创建对象

var res = {

 num: 3,

 getRes:function(){

return res.num*res.num;

 }

 };

 alert(res.getRes());

//通过工厂方法创建对象

function getRes(num){

 var res = {};

 res.num = num;

 res.getRes1 = function(){

 return num*num;

}

 return res;

}

 var res1 = getRes(3);

 alert(res1.getRes1());

//通过构造函数方法创建对象

function GetRes(num){

this.num = num;

this.getRes = function(){

return num*num;

}

}

var res1 = new GetRes(7);

alert(res1.getRes());

相关文章

网友评论

      本文标题:js高级 第一章

      本文链接:https://www.haomeiwen.com/subject/fgmhzttx.html