代码拉取完成,页面将自动刷新
// /不需要共享的数据写在构造函数中,需要共享的数据写在原型中。//https://segmentfault.com/a/1190000018057701
// 抽象基类对象, 后缀作为具体类的原型
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");
Object.getPrototypeOf(this);//可以得到原型,然后修改。?? https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getPrototypeOf
};
this.initialize.apply(this,["调用vendors_s的dosomething "]);// 在后,调用的就是上面的doSomething, 为this指向
};
// let GW_s = function(){
// this.doSomething = function () {
// console.log("具体策略GW做something");
// };
// // this.prototype.initialize.apply(this,arguments);//
// };
vendor_s.prototype = Object.create(DicApplyAdd_Scrap);// 继承 dic。
// vendor_s.constructor= vendor_s; //修正,指向正确的构造函数. js 不保证指向正确的对象。尽量不要依赖目前看到的作用之一,通过实例的构造函数给闭包中的函数增加属性方法。 使用标准方法Object.getPrototypeOf()代替__proto__可以做到不改变实例对象的原型链而访问对象或者添加/修改必要的属性。
// https://www.zhihu.com/question/19951896
// GW_s.prototype = Object.create(DicApplyAdd_Scrap)
//context上下文
let Context = function () {
this.strategy = null;
};
Context.prototype = {
setStrategy: function (strategy) {
this.strategy = strategy;
},
exeStrategy: function (params) {
this.strategy.doSomething();
},
};
// 实例相关具体策略
const status_is_vendor = new vendor_s();
// const status_is_GW = new GW_s();
status_is_vendor.doSomething();
// status_is_GW.doSomething();
status_is_vendor.getName();
// status_is_GW.prototype.doSomething(); //还是默认的没有被改变。字面量?
// const status_switch = new Context(); //必须new 下面才有setStrategy这个方法。
// status_switch.setStrategy(status_is_vendor);
// status_switch.exeStrategy();
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。