面向对象
面向对象不是新语法,是一种思考方式
处理重复 - 工厂函数
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 ); //不相等 - 说明占用了两个内存空间 - 浪费。将函数定义在全局可以解决。
//但是函数或变量定义在全局其实有缺点:容易被覆盖

浙公网安备 33010602011771号