在js中我们需要创建一个对象,比如创建一个“人”,它拥有自己的名称属性,和可以说话的功能,我们可以这样实现:
var person = new Object;
person.name = "Tony";
person.sayName = function(){
console.log(this.name);
};
//或者字面量形式
var person={
name:"tony",
sayName:function(){
console.log(this.name);
}
}
这种设计被称为:原始模式。我们可以看出它具如下优缺点:
优点:可以直观的看出对象拥有的属性和方法
缺点:如果有多个类型,需要创建多个实例
如果需要批量创建多个人,如person1、person2……的时候,使用原始模式的话每次都要重复类似的代码,如果要是可以批量生产就好了,这个时候使用工厂模式就能很好解决。如下:
var person=function(name){
var obj=new Object;
obj.name=name;
obj.sayName=function(){
console.log(this.name);
}
return obj
}
var p1=person('tony');
var p2=person('aimi');
console.log(typeof p1); // object
console.log(typeof p2); // object
console.log(p1 instanceof Object); // true
这样简单的调用就可进入造人模式了(啪啪啪……),只需要指定姓名就可以了。所以工厂模式可以理解像生活中工厂一样,可以批量的生产具有相同属性和功能的商品。开发场景:当我们需要解决很多相似问题,这时候就需要采用工厂模式来实现。
但是工厂模式下的对象我们不能识别它的类型,由于typeof返回的都是object类型,不知道它是那个对象的实例。另外每次造人时都要创建一个独立的person的对象,会造成代码臃肿的情况。所以工厂模式的优缺点总结如下:
优点:同一类型同一属性可以重复调用;能解决多个相似的问题。
缺点:不能知道对象识别的问题(对象的类型不知道)。
除了上面讲的工厂模式外,我们还可以使用构造函数模式来解决重复造轮子,产生大量的重复性代码的问题。例如:
var Person=function(name){
this.name=name;
this.sayName=function(){
console.log(this.name);
}
}
var p1=new Person('tony');
var p2=new Person('aimi');
我们可以看出要使用Person的新实例,就必须使用new。新实例的constructor(构造函数)属性指向的就是Person。
console.log(p1.constructor == Person);//true
同时使用instanceof检测对象的类型就更为可靠了,因为instanceof是用来专门比较一个对象是否为某个构造函数的实例:
console.log(p1 instanceof Object); // true
console.log(p1 instanceof Person); // true
这就是构造函数比工厂模式强的地方,因为它只道自己从哪里来,通过谁产生的。
当创建对象的流程赋值的时候,比如依赖于很多设置文件等。并且,你会经常在程序里看到工厂方法,用于让子类类定义需要创建的对象类型。
var Person = (function () {
var Person = function (name) {
this.name = name;
this.sayName=function(){
console.log(this.name);
}
};
return function (name) {
return new Person(name);
};
})();
var p1 = new Person("tony");
在JavaScript中“创建对象”是一个复杂的话题。这门语言提供了很多种创建对象的方式,不论新手还是老手都可能对此感到无所适从,不知道应该选择哪一种。不过,尽管创建对象的方法很多,看上去语法差异也很大
面向对象的三大特性:继承、封装、多态。JavaScript 没有提供传统面向对象语言中的类式继承,而是通过原型委托的方式来实现对象与对象之间的继承。JavaScript 也没有在语言层面提供对抽象类和接口的支持。
桥接模式是结构型设计模式,桥接模式本身应对的是由于实际的需要,使用不同纬度的条件和方法,桥接模式可以将两个类型分离出来,让两者之间都可以独立的拓展,让每一个类都更加符合单一职责
当 Typescript 严格模式设置为 on 时,它将使用 strict 族下的严格类型规则对项目中的所有文件进行代码验证。规则是:此规则不允许变量或函数参数具有隐式 any 类型。请看以下示例:
代理模式属于设计模式中结构型的设计模式; 顾名思义就是为一个对象提供一个代用品或占位符,以便控制对它的访问!并且在未来如果不需要预加载,只要改成请求本体代替请求代理对象就行。
最近iOS13 发布了darkmode模式。虽然本人觉得次此功能呼声大于实际,但作为一个以用户体验为己任的前端,当然不能坐视不管,我们总该做点什么。
url 中带有#的便是 hash 模式,#后面是 hash 值,它的变化会触发 hashchange 这个事件。通过这个事件我们就可以知道 hash 值发生了哪些变化。
享元模式 (Flyweight Pattern)运用共享技术来有效地支持大量细粒度对象的复用,以减少创建的对象的数量。享元模式的主要思想是共享细粒度对象,也就是说如果系统中存在多个相同的对象,那么只需共享一份就可以了
观察者模式定义了一种一对多的对象依赖关系,当被依赖的对象的状态发生了改变,所有依赖它的对象都会得到通知;假如你去苹果专卖店买最新款的iphone11,因为iphone11刚出来不久,正处旺季,供货不足;
当我在MySQL数据库中尝试插入一条带有时间戳的数据时报错:我们可以发现错误信息提示是时间值错误,但是我们这明显是一个合法的时间点啊。
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!