首页 > IT职业 > IT生活 > javascript设计模式之创建型模式
jQuery $(‘div’)
React.createElement
jQuery只有一个$
模拟登录框
其他

Vue异步组件

$(div’)和new $(div’)有何区别?

class Product{
constructor(name){
this.name=name
}
init() {
alert('init')
}
fun1() {
alert('fun1')
}
fun2() {
alert('fun2')
}
class Creator {
create(name){
return new Product(name)
}
}
//测试
let creator=new Creator()
let p=creator.create('p1')
p.init()
p.fun1()


class SingleObject {
login() {
console.log('login...')
}
}
SingleObject.getInstance = (function () {
let instance // 存储唯一被初始化的实例
return function () {
if (!instance) {
instance = new SingleObject();
}
return instance
}
})()
// 测试 ,不过js只能靠文档约束不能new SingleObject()
let obj1 = SingleObject.getInstance()
obj1.login()
let obj2 = SingleObject.getInstance()
obj2.login()
console.log(obj1 === obj2) true
let obj3 = new SingleObject()
obj3.login()
console.log(obj1 === obj3) false

class LoginForm {
constructor() {
this.state = 'hide'
}
show() {
if (this.state === 'show') {
alert('已经显示')
return
}
this.state = 'show'
console.log('登录框已显示')
}
hide() {
if (this.state === 'hide') {
alert('已经隐藏')
return
}
this.state = 'hide'
console.log('登录框已隐藏')
}
}
LoginForm.getInstance = (function () {
let instance
return function () {
if (!instance) {
instance = new LoginForm();
}
return instance
}
})()
// 一个页面中调用登录框
let login1 = LoginForm.getInstance()
login1.show()
// login1.hide()
// 另一个页面中调用登录框
let login2 = LoginForm.getInstance()
login2.show()
// 两者是否相等
console.log('login1 === login2', login1 === login2)
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/2568/viewspace-2815792/ ,如需转载,请注明出处,否则将追究法律责任。