一、工厂模式
工厂模式中通常我们采用调用的方式来创建对象,在函数中一般要有返回值;要在函数中new一个对象或者定义一个空的对象,而这个对象就是当前的对象,在函数内可进行属性添加赋值等操作。例如:
function createObject(name,age) {
var obj=new Object();
obj.name=name;
obj.age=age;
obj.sayHi=function () {
console.log("您好");
};
return obj;
}
var fun = createObject("墨子",70);
二、自定义创建对象
在自定义创建对象时是不需要再方法内使用new字符的,同时也不需要返回值;其中的this就是当前的对象,使用this 即可操作对象的属性;创建这个对象时直接用new来创建即可:
function Person(name,age) {
this.name=name;
this.age=age;
this.sayHi=function () {
console.log("您好");
};
}
var fun = new Person("张三",50);
这两种方式是有共同点的:都可以创建对象,都可以传入参数,并且都是函数。
原型:
* 每个实例对象中都有一个属性__proto__,是原型,浏览器使用的,不标准的属性
* 每个构造函数中都有一个属性prototype,是原型,程序员使用的,
* 面向对象和面向过程都是编程思想
* 面向对象注重的是结果,面向过程注重的是过程
* 面向对象的特性:封装,继承,多态
* 继承:
* 1.通过原型实现继承,改变原型的指向,属性在初始化的时候就已经固定了,如果是多个对象实例化,那么每个实例对象的属性的值在初始化的时候都是一样的
* 2.借用构造函数继承,不能继承方法
* 3.组合继承,可以解决属性和方法的继承的问题
* 4.拷贝继承,就是把一个对象中的原型中的所有的属性和方法复制一份给另一个对象
*
*
* 创建对象的三种方式
* 1. 字面量的方式
* 2. 调用系统的构造函数
* 3. 自定义构造函数
*
*
*
* 原型链:实例对象和原型对象之间的关系,主要是通过__proto__和prototype来联系
*
* 原型的指向是可以改变,所以,js中是通过改变原型来实现继承
*
*
* 原型的作用:
* 实现数据共享,继承, 都是为了节省内存空间
* 如果属性和方法都需要共享,那么就把属性和方法添加到原型中
*
*
* 函数中的this的指向
*
* 普通的函数中this是window
* 构造函数中的this,构造函数一般都是创建实例对象使用的,是通过new关键字,构造函数也是函数
* 构造函数中的this是实例对象
* 方法中的this是实例对象
* 原型中的方法中的this是实例对象
* 定时器中的this是window
*
* 函数是对象,构造函数也是函数,也是对象
* 对象是不是函数呢?不一定
*
* 又因为实例对象是通过构造函数来创建的,构造函数中有原型对象prototype
* 实例对象的__proto__指向了构造函数的原型对象prototype
*
* Math是对象,但不是函数
*
*
*
*
* */