构造函数,原型,实例三者的联系

构造函数通过prototype获取到原型

原型通过construxtor

实例通过_ proto _找到原型

构造函数与工厂函数之间差异: 1.工厂函数需要创建对象,以及必须有返回值 2.工厂函数针对的都是Object的对象模型,而构造函数可以匹配自定义的对象模型 即前者不论创建什么都只有一个xx instanceof Object 而后者根据自定义名而定类型,如上举例所示 3.构造函数弊端,如果在全局中定义相同的局部变量,容易造成全局污染,因为this.xx如果在局部获取不到,就会去全局中获取 4.构造函数可以重写,可以在全局中添加新属性和方法Person.prototype = {},但工厂函数只能在局部添加 各自适用场合: 构造函数:适应用于大型项目,属性以及方法时常变换的项目 工厂函数:适应用于小型项目,或者正在制作过程还没有成型的项目

工厂模式 :

特点:

1.显示创建的对象

2.显示返回的一个对象

3:缺点 :无法判断对象的类型

构造函数的特点:

1.没有显示的创建对象

2.隐式返回了新的对象

3.可以判断对象类型(属于这个构造函数)

4.缺点:

因私有而冗余:所有的方法和属性都会在实列上创建一遍


function Factory(name, age, sex, car) {
    this.name = name;
    this.age = age;
    this.sex = sex;
    this.car = car;
    this.eat = function (food) {
        console.log('吃' + food)
    }
}
var obj = new Factory('我是', 10, 'nan', 'ff')
console.log(obj)

模拟构造函数创建对象(和上边这个函数关联着呢)

var obj = {};
Factory.call(obj, 'll', 18, '男');
obj._poroto_ = Factory.prototype;
console.log(obj)

原型模式

将属性和方法都放在原型对象上


function Hyj() { }
console.log(Hyj.prototype);
Hyj.prototype.name = 'hyj';
Hyj.prototype.age = 18;
Hyj.prototype.sex = '男';
Hyj.prototype.eat = function (food) {
    console.log('吃' + food);
}

问题:

本质:因为共享的特征,导致原型上引用类型在各个实列上会影响

原型中所有属性是被很多实列共享的

对于包含引用类型值的属性来说,问题有点大

4.组合式 : 结构 + 原型

私有的属性

function People(name, age, sex) {
this.name = name; this.age = age; this.sex = sex;
} // 共享的方法
People.prototype.eat = function (food) {
    console.log('吃' + food);
}
var a = new People(1, 2, 3)
console.log(a)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容