介绍
- 将new操作单独封装
-
示例
你去购买汉堡,直接点餐、取餐,不会自己亲手做
-
常见使用场景
jQuery的函数$(),内部创建了新对象
- (‘div’) 与 new (‘div’)有何区别?
- 第一:书写麻烦,jQuery的链式操作将成为噩梦
- 第二:一旦类名jQuery发生变化,将是灾难性的
```javascript
class jQuery {
constructor(selector) {
let slice = Array.prototype.slice;
let dom = slice.call(document.querySelectorAll(selector));
let len = dom ? dom.length : 0;
for (let i = 0; i < len; i++) {
} this.length = len; this.selector = selector || “”; } append(node) {} addClass(name) {} html(data) {} // coding… } window.$ = function (selector) { return new jQuery(selector); };this[i] = dom[i];
// test var $p = $(“p”); console.log($p); console.log($.addClass);
- React.createElement```javascript// jsx语法var profile = (<div><img src="avatar.png" className="profile" /><h3>{[user.firstName, user.lastName].join("")}</h3></div>);// react手写domvar profile = React.CreateElement("div",null,React.CreateElement("img", { src: "avatar.png", className: "profile" }),React.CreateElement("h3", null, [user.firstName, user.lastName].join(" ")));// react内部代码class Vnode(tag, attrs, children) {// Coding...}React.CreateElement = function (tag, attrs, children) {return new Vnode(tag, attrs, children);};
- vue异步组件
```javascript
Vue.component(“asycn-example”, function (reslove, reject) {
setTimeout(function () {
}); });reslove({template: "<div>I am async!</div>",});
<a name="i9iMF"></a># 工厂模式代码示例```javascriptclass Product {constructor(name) {this.name = name;}init() {alert("init");}fun1() {alert("fun1");}fun2() {alert("fun2");}}class Creator {create(name) {return new Product(name);}}// testlet creator = new Creator();let p = creator.create("p1");p.init();p.fun1();
总结
工厂模式主要用在需要频繁创建新对象的时候,以及多处需要创建新对象的时候。
使用工厂模式可以避免类名改动造成需要大量修改代码的情况
