//(一)、工厂模式
/* 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的
过程.
**/
//下面首先来个简单易懂的例子吧!注释很详细,不理解的朋友一起来看看吧!
//1.普通函数
function demo(){
//第一步:进入工厂,创建个函数;
var obj = new Object();
//第二步:进行"加工"
obj.name = "张三";
obj.age = 20;
obj.showname = function(){
alert(obj.name);
}
//第三步:"出厂"
return obj;//也有不用return的,不过感觉这样更好理解点
}
var obj = demo();
console.log(obj.name);//输出:"张三"
//也可调用方法
obj.showname();
//这就是一个完整的工厂模式了,这是从比较好理解的一方面讲解的
//2.构造函数 构造函数通过上边的工厂模式也可以转变成一个简单的构造函数
//先看下例子:
function Bemo(name,age,showname){
this.name = name;
this.age = age;
this.showname = showname;//这个方法在这采用直接传入都可以
}
//构造函数需要用new产生新的函数
var obj1 = new Bemo("张三","18",function(){alert(this.name)});
console.log(obj1.name)
//构造函数也可以通过原型对象prototype来添加属性
Bemo.prototype.sex = "男";
console.log(obj1.sex);
//通过原型链追加的属性,构造出的其他函数也可以调用
var obj2 = new Bemo("李四","20",function(){console.log("hello world!")});
console.log(obj2.sex);//这样看来这样追加的属性,是个公共属性都有的可以调用,要记住啊
/*在ECMAscript中的狗早函数可用来创建特定类型的对象.像Object和Array这样的原生构造函数,
在运行时会自动出现在执行环境中.
此外,也可以创建自定义的构造函数,从而定义自定义对象类型的属性和方法;
再冲心举个构造函数的例子
*/
//构造一个人的类,javascript没有类的概念,使用构造函数模拟类使用的,更加方便
function Person(name,age,sex,job){
this.name = name;
this.age = age;
this.sex = sex;
this.job = job;
this.say = function(){
alert("hello world!");
};
this.sayName = function(){
alert(this.name);
}
}
Person.prototype.walk = function(){
alert("没事儿走两步");
}
var person1 = new Person("赵四",25,"男","警察");
var person2 = new Person("小李",20,"女","空姐");
console.log(person1.name);
person2.say();
/*在这个例子中,Person()函数取代了普通函数的名字,构造函数有普通函数的区别有:*/
//1.一个比较直观,并且需要遵守的一个约定,构造函数的命名首字母要用大写
//2.没有显式的创建对象;
//3.直接将属性和方法付给了this对象
//4.没有return语句
//构造函数 new的作用
/*
1.可以重新创建一个空的新对象
2.让空对象去调用构造函数给自己赋值(也就是使用心得对象去掉函数,this也就是当前创建的新对象)
3.执行构造函数中的代码(为这个新对象添加属性)
4.返回心对象
*/
//3.继承
/*
在这只简单介绍比较好理解的
直接从例子开始
*/
function Father(name,money,house){
this.name = name;
this.money = money;
this.house = hose;
}
function Son(name,money,house){
//或 Father.call(this,name,money,house)
Father.apply(this,[name,money,house]);
}
var son = new Son("李",200,"100平米");
//这个是直接继承父亲的属性name,money和house;用apply或call实现继承
//apply和call的区别 call后边是直接加参数串,apply后边是加数组
function Father(name,money,house){
this.name = name;
this.money = money;
this.house = hose;
}
Father.protoype.firstName = "沈";
Object.prototype.hobby = "篮球";//对象的原型
function Son(name,money,house){
//或 Father.call(this,name,money,house)
Father.apply(this,[name,money,house]);
}
Son.prototype.firstName = Father.prototype.firstName;
alert(son.firstName);
//这样就是继承父级的原型对象
//继承是一个原型链 先找自身有没有要查找的类和方法,如果没有向上从自身的原型里找,
//如果没有继续往上对象Object里找,,如果还没有就输出undefined;(万物皆对象)
构造函数与构造函数的继承以及call和apply的区别
最新推荐文章于 2021-12-23 17:23:21 发布