面向对象基础总结
第一天:
了解了面向对象与面向过程的区别:面向过程就是将一个问题按需要一步一步往下做。而面向对象是将一个问题看成是多个对象,其中包含了属性与方法,当有需要时,就写出相应的方法与功能,在调用。
学习了如何创建对象://var 对象名={属性或方法}
var p={ //var 对象名={属性或方法}; name:"李四", //属性: 属性名:属性值; age:20, //属性或方法结尾用"," 而不是用";" }
如何调用对象的属性和方法:对象名.属性名/方法名;
①.点语法: 对象名.方法名/属性名 ②[]:对象名["方法名/属性名""]可以包含变量;
var p={ name:"李四", age:20, speak:function(){ //属性为函数时:称为方法 console.log("吃了"); } } p.speak(); //p.方法名/属性名 点语法 console.log(p.name); console.log(p["eat"]); //p["属性名/方法名"] []中可以为变量(优点)
如何给对象添加属性:p.新属性或方法
for...in可以用来遍历对象的所有属性。
var p={ name:"李四", age:20, } p.sex="男"; //在对象中添加了sex属性 delete p.age; //delete 是操作符 所以不用() console.log(p.age); // undefined 被删除 for(var i in p){ console.log(i,p[i]) //遍历对象 输出i:属性名 p[i]:值 }
几种创建对象的方法:
new Object( )创建对象:
缺点:重复用一个接口创建多个对象,产生很多重复代码。
解决:工厂模式的诞生
var p1=new Object();
p1.name="李四";
p1.age="20";
console.log(p); // name: "李四", age: 20
工厂模型
解决了new Object( )的缺点;
function p(name,age,sex){
var p1=new Object();
p1.name=name;
p1.age=age;
p1.sex=sex;
}
var p=p("李四",20,"男"); //name: "李四", age: 20, sex: "男";
工厂模式缺点:返回的值都是Object,所以无法识别对象的类型;
构造函数创建的对象:
function Fn(name,age,sex){ //Fn构造函数 一般首字母最好大写 this.name=name; //this 指向 new出的f1 this.age=age; this.sex=sex; } var f1=new fn("李四",20,"男"); //调用普通函数用new就成了构造函数,当没有创建对象时候, this 指向的是window; console.log(f1); //name: "李四", age: 20, sex: "男";
注意:构造函数中最好不要return ,return 10;(返回无效);return {}:返回的是空对象