1 Star 0 Fork 0

唐心/JSPatternDesign

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
strategy_state_v5.js 2.69 KB
一键复制 编辑 原始数据 按行查看 历史
唐心 提交于 2021-10-05 00:34 . init
// 抽象基类对象, 后缀作为具体类的原型
var DicApplyAdd_Scrap = {
initialize: function (argument) {
//this.name = name;
this.doSomething(" initalize");//指向哪里
console.table("被初始化了"+arguments[0]);
},
getName: function () {
console.log("getname 输出");
return "base class?";
},
doSomething: function (who) {
console.log("base class do somethin fn"+who);
},
//初始化表格
initGrid: function () {
// 替换方法还是更多细粒度?
}
};
//增加属性与方法。
// strategys
let vendor_s = function () {// 使用this 则变成了构造函数
// this.initialize.apply(this,["vendors_s 构造"]);// 在前,调用的就是原型对象, 因为还没有覆盖this 还没有doSomething()
this.doSomething = function () { // when vendor is 被new时,函数变成了构造函数。this,此时this指向刚new的出来的。
console.log("具体策略vendor做something");
};
this.initialize.apply(this,["调用vendors_s的dosomething "]);// 在后,调用的就是上面的doSomething, 为this指向
};
let GW_s = function(){
this.doSomething = function () { // when vendor is 被new时,函数变成了构造函数。this,此时this指向刚new的出来的。
console.log("具体策略GW_S做something");
};
this.initialize.apply(this,["调用GW_S的dosomething "]);
};
vendor_s.prototype = Object.create(DicApplyAdd_Scrap);// 继承 dic。
GW_s.prototype = Object.create(DicApplyAdd_Scrap)
//context上下文
let Context = function () {
this.strategy = null;
};
Context.prototype = {
setStrategy: function (strategy) {
// this.strategy = new strategy();//可能会内存泄漏/抖动吗?
this.strategy = strategy;
},
exeStrategy: function (params) {
this.strategy.doSomething();
},
getStrategy: function () {
return this.strategy;
}
};
// 实例相关具体策略
const status_is_vendor = new vendor_s();
const status_is_GW = new GW_s();
// 动态修改
console.log( Object.getPrototypeOf(status_is_vendor)=== vendor_s.prototype, Object.getPrototypeOf(status_is_vendor)=== DicApplyAdd_Scrap, );//可以得到原型,然后修改。?? https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getPrototypeOf
// status_is_vendor.doSomething();
// status_is_GW.doSomething();
// status_is_vendor.getName();
const status_switch = new Context(); //必须new 下面才去原型上找setStrategy这个方法。
status_switch.setStrategy(status_is_vendor);
status_switch.exeStrategy();
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/dangxin/jspattern-design.git
git@gitee.com:dangxin/jspattern-design.git
dangxin
jspattern-design
JSPatternDesign
main

搜索帮助

0d507c66 1850385 C8b1a773 1850385