// 什么是对象
面向对象就是对面向过程对封装 使代码高复用低耦合 封装继承多态
var xm={ // 封装后使字符串有意义比如name代表了名字
name:"小明",
liuDog:function(){
console.log("我在遛狗呀");
}
}
// 使代码模块话 可以提高复用性和降低耦合度
// 封装
var obj={
}
var obj1={
name:"张学友",
sayHello:function () {
console.log("hello");
}
}
//obj.sayHello(); // is not a function
// 混入式继承 for in
for (var k in obj1){
obj[k]=obj1[k];
}
obj.sayHello(); // cosole.log(hello)
// 简单的继承
实例的父类变量接受子类的对象
// 多态
var xm={ // 可以直接创建一个对象 但是可扩展性太差
name:"小明"
}
var xm=new Object()
xm.name="小明" // 内置函数的方法
function creatObj(name){ // 工厂函数(不推荐使用)
var xm=new Object();
xm.name=name
return xm
}
var xm=creatObj("小明"); // 创建一个简单的工厂函数
var xh=creatObj("小红");
console.log(xm,xh)
</script>
function Person(name,say){ // 构造函数 首字母大写 用来区分
// new 新创建出来的对象赋值给this
this.name=name;
this.say=say
}
var p=new Person("小明2",function(){
console.log("我是小明呀");
}); // new Object();
console.log(p) // 默认返回新创建的这个对象 普通函数则要return
p.say(); // 我是小明呀
// 总的来说 new说用来创建对象的 构造函数是用来初始化对象的
如果像普通函数一样调用构造函数 this指向window全局变量
// 创建对象的方法
function say(){
console.log("我是"+this.name); //this指向调用该方法的对象
}
function People(name){
this.name=name;
this.say=say; // 所有对象公用一个方法就定义一个函数 防止资源浪费
}
var obj1=new People("obj1");
obj1.say();
var obj2=new People("obj2");
obj2.say();
//构造函数资源浪费的问题