JavaScript 中的动态实例化
Dynamic Instantaition in JavaScript
我查看了其他在线示例,但它们不起作用。
所以。。。
我正在尝试在 JavaScript 中实现来自"Head First"的经典"装饰器模式"......我真的很接近。
给定以下"类":
// "CLASSES": BEVERAGES
function DarkRoast(){
this.cost = 1.00;
this.description = "Dark Roast";
};
// DECORATORS: CONDIMENTS
function Milk(beverage){
var instance = beverage;
beverage.cost = function(){
return instance.cost + 0.25;
};
beverage.description = functionn(){
return instance.description + ', Milk';
};
};
问:如何从以下函数动态实例化"牛奶"?
function appendCondiment(className, beverage) {
/* Needs to do this, but dynamically:
var instance = new Milk(beverage); */
// This fails (of course)
var instance = new window[className].call(beverage);
}
你需要:
var instance = new window[className](beverage);
怎么样:
var DarkRoast = function () {
this.cost = 1.00;
this.description = 'Dark Roast';
};
var condiments = {
milk: {
cost: 0.25;
description: 'Milk'
},
cream: {
cost: 0.3,
description: 'Cream'
}
};
var appendCondiment = function ( condimentName, beverage ) {
var condiment = condiments[ condimentName ];
beverage.cost += condiment.cost;
beverage.description += ', ' + condiment.description;
};
用法:
var bev = new DarkRoast();
appendCondiment( 'milk', bev );
bev.cost // 1.25
bev.description // 'Dark Roast, Milk'
顺便说一句,考虑让DarkRoast
从Beverage
类继承,然后定义一个appendCondiment
方法来Beverage.prototype
。然后你可以写这个:
var bev = new DarkRoast();
bev.appendCondiment( 'milk' );
哪个更具可读性。
相关文章:
- 如何在GoogleWeb工具包(GWT)中从JSNI调用接口(实例化)
- 如何在用户输入时实例化数组
- 在requirejs中共享实例化对象
- Mongoose TypeError:实例化模式类型的对象时,对象不是函数
- Angular重命名模块后未能实例化模块
- Backbone relational无法实例化两个RelationalModel对象
- 我应该如何用javascript实例化这个日期
- AngularJS出错-无法实例化模块
- JavaScript 中的动态实例化
- 用javascript动态实例化类
- JavaScript中的动态实例化[Classname as String]
- 是否可以从动态变量实例化 javascript 类
- 《烈焰流星》动态实例化模板和数据上下文
- 我如何在JS中动态地要求模块、实例化对象和调用函数
- 在父元素的悬停出口动态实例化/暂停Youtube视频(iFrame API)
- Jquery.将插件的实例化绑定到动态加载的内容上
- JavaScript中的动态实例化
- 如何动态实例化类
- jQuery:尝试动态加载jQuery.在脚本运行之后才进行实例化
- 动态实例化函数&在JavaScript中调用方法