面向对象

面向对象不是新语法,是一种思考方式

处理重复 - 工厂函数

function createPerson(name,age){
    var obj = {
        name,
        age
    }
    return obj
}

var zs = createPerson('张三',12);
console.log(zs);

var ls = createPerson('李四',13);
console.log(ls);

工厂函数的缺点——无法精准的看出数据类型 - person 和 dog 分不清

构造函数,也是一种函数,用来定义对象的函数

其实任何函数都可以用来定义对象,只需要在他前面加 new
var f = new Person();
console.log(f);

解决工厂函数的缺点

function Person(name,age){
    this.name = name;
    this.age = age
}

var zs = new Person('张三',12)
console.log(zs);

var ls = new Person('李四',13);
console.log(ls);

构造函数中的this代表new出来的那个对象

new的时候总共经历了4个步骤:
1.在构造函数中创建了一个空对象 - 隐形的
2.将构造函数中的this指向这个空对象
3.执行构造函数中的代码 - 给这个对象添加属性
4.将空对象返回
 
构造函数的缺点
 
function Person(name,age){
    this.name = name;
    this.age = age
    this.eat = eat
}
var zs = new Person('张三',12)

var ls = new Person('李四',13)

console.log(zs.eat);
console.log(ls.eat);

console.log( zs.eat === ls.eat ); //不相等 - 说明占用了两个内存空间 - 浪费。将函数定义在全局可以解决。
  //但是函数或变量定义在全局其实有缺点:容易被覆盖

 

posted @ 2021-01-18 17:35  技术活当赏  阅读(55)  评论(0)    收藏  举报