什么是对象:
无序属性的集合,其属性可以包含基本值,对象或者函数把 ECMAScript 的对象想象成散列表:无非就是一组名值对,其中值可以是数据或函数
接下里就说创建对象几种模式下的优缺点
1.工厂模式
显示创建对象
显示返回一个对象
缺点:无法判断对象类型
function factory(name, age, sex) {
var obj = new Object();
obj.name = name;
obj.age = age;
obj.sex = sex;
return obj;
}
var obj1 = factory('yyqx', 18, 'nan');
console.log(obj1);
2.构造函数模式
不能显示创建对象
隐式新的对象
能判断对象类型
缺点:因私有而冗余 所有的方法和属性都会在实例上创建一遍
function Factory(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
this.eat = function(food) {
console.log('我只会' + food)
}
}
var str = new Factory('yyqx', 18, 'nan');
console.log(str);
str.eat('饭');
模拟构造函数创建对象
var obj = {};
Factory.call(obj, 'll', 18, 'girl');
obj.__proto__ = Factory.prototype;
3.原型模式
将属性和方法都放在原型对象上
因为共享特性 导致原型上引用类型在各个实例上都会有影响
原型中所有属性是被实例共享的
对于包含引用类型值的属性来说 问题很大
function Hyj() {
}
console.log(Hyj.prototype);
Hyj.prototype.name = 'yyqx';
Hyj.prototype.age = '18';
Hyj.prototype.sex = 'nan';
Hyj.prototype.eat = function(food) {
console.log('我侄子会' + food)
}
console.log(Hyj.prototype);
Hyj.prototype.eat('饭');
**4.构造+原型
私有属性
function Factory(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
共有属性
Factory.prototype.aet = function(food) {
console.log('我知乎' + food)
}
var str = new Factory('yyqx', 18, 'nv');
console.log(str)
Factory.prototype.aet('fan');
希望我的理解可以给你们提供一些帮助,学识有限,如果有地方出现错误或者有更好的方法去实现,欢迎私信!