我怎么能把一个类嵌套在另一个类中呢
How can I nest a class within another?
所以我正在尝试JavaScript"类",试图澄清和简化我的一些代码。我有这样的东西:
function action (name, vActor, vTarget) {
this.name = name;
this.vActor = vActor;
this.vTarget = vTarget;
this.addRoll = addRoll;
this.children = {};
}
function addRoll (name, diffMod, dice, success, critSuccess, failure) {
this.children[name] = {} ;
this.children[name].diffMod = diffMod;
this.children[name].dice = dice;
this.children[name].success = {condition: success, outcome: {}};
this.children[name].critSuccess = {condition: critSuccess, outcome: {}};
this.children[name].failure = {condition: failure, outcome: {}};
this.children[name].addSuccess = addSuccess;
this.children[name].addFailure = addFailure;
this.children[name].addOutcome = addOutcome;
}
这样做对吗?我的主要问题是关于谁拥有"function addRoll()"部分中的"this"对象。我假设"this"仍然属于动作"class"。我也不确定关于启动一个新的空白对象和使用点符号分配内容的语法。提前谢谢。
忽略函数绑定并调用apply或call,this
属性是该方法的所有者。使命感
addRole(...)
this
属性指向全局window
对象。如果您有一个对象{}
或实例new Something()
,名为x
,函数为addRole
,并调用它…
x.addRole(...)
this
属性为x
。
附加您已将函数正确分配给操作对象,因此当您调用。。。
var a = new action(...);
然后打电话给
a.addRole(...);
this
属性是您创建的action
的a
实例。为了防止它被作为全局函数调用并向window
添加属性,可以将其分配给prototype
。prototype
对象具有一些强大的功能来构建继承,但目前只是简单地更改。。。
addRole(...) {...}
以下内容。。。
action.prototype.addRole = function(...) {...}
正在删除作业。。。
this.addRole = addRole
将防止在没有所有者的情况下意外调用函数
进一步您可以重写在addRole中分配子项的方式,以更好地利用对象文字符号。。。
function addRoll(name, diffMod, dice, success, critSuccess, failure) {
this.children[name] = {
diffMod: diffMod,
dice: dice,
success: {
condition: success,
outcome: {}
},
critSuccess: {
condition: critSuccess,
outcome: {}
},
failure: {
condition: failure,
outcome: {}
},
addSuccess: addSuccess,
addFailure: addFailure,
addOutcome: addOutcome
};
}
您还可以重构代码以使用子级的类,如下所示。
function Action(name, vActor, vTarget) {
this.name = name;
this.vActor = vActor;
this.vTarget = vTarget;
this.children = {};
}
Action.prototype.addRoll = function(name, role) {
this.children[name] = role;
}
function Role(diffMod, dice, success, critSuccess, failure) {
this.diffMod = diffMod;
this.dice = dice;
this.success = success;
this.critSuccess = critSuccess;
this.failure = failure;
}
Role.prototype.addSuccess = function(...) {...}
Role.prototype.addFailure = function(...) {...}
Role.prototype.addOutcome = function(...) {...}
function Condition(condition) {
this.condition = condition;
this.outcome = {};
}
是的,如果从action
的实例调用addRoll
,则this
对象仍将属于action
。
不过,您的操作方式让我有点困惑,我通常通过构造函数的prototype
属性来分配构造函数的方法(您称之为类,但不是真正的)
像这个
function action()
{
...
}
action.prototype.addRoll = function(){...}
var instance = new action();
instance.addRoll();
你在这里问了很多问题,让我试着一次回答一个所以这是你的代码,简化版
function Action (name) {
this.name = name;
this.addRoll = addRoll;
}
function addRoll (name, diffMod, dice, success, critSuccess, failure) {
...
}
如何启动一个新的空白对象
您使用"new"关键字,因此要创建新的"action"对象,请执行var newAction = new Action('hello')
javascript中的"this"指的是什么
"this"指的是函数的调用方。一个简单的例子:var newAction = new Action('hello world');
newAction.addRoll(//...);
在这个例子中,addRoll函数内部的"this"是"newAction"
,但如果您要直接调用"addRoll",如果您使用浏览器,"this"指的是"Window"对象。
- 嵌套到另一个函数中的Fancybox函数;不起作用
- 我怎么能把一个类嵌套在另一个类中呢
- 它在另一个函数中嵌套后不会输出文本
- 从另一个(初学者内部)访问嵌套的javascript函数
- 一个发布对另一个发布隐藏嵌套字段
- 嵌套另一个 Ajax 请求时,Ajax 响应处理中断
- 如何从jQuery中的另一个函数调用嵌套函数
- 如何检查一个对象是否嵌套在另一个对象的属性中作为属性
- 如何在 JavaScript 中从另一个外部函数访问嵌套的内部函数
- 如何在 Jquery 中访问嵌套在另一个对象中的对象的属性
- 嵌套在另一个模板中的主干模板
- 访问嵌套在 Javascript 中另一个对象中的对象的属性
- 向嵌套的 JavaScript 对象添加另一个值
- 引导表:如何将一个表嵌套到另一个表中
- 如何使用附加到html标签的嵌套ng应用程序将一个基于angularjs的SPA包含到另一个基于angularjs
- 使用Javascript查找元素组并将它们嵌套在一个新元素中
- 使用JQM(jQueryMobile),为什么可折叠嵌套另一个可折叠标题会间歇性切换
- 访问一个嵌套在一个带有聚合物的对象中的数组中的一个对象的值
- Javascript函数工厂嵌套在一个即时函数内嵌套jQuery准备好了
- 如何使
位置:相对嵌套在一个位置:绝对