有很多不同的方法可以在html页面中包含JavaScript.我知道以下选项:
不计算来自硬盘,javascript:URIs和onEvent-attributes [ 3 ]的浏览器脚本,已经有16个替代方法可以执行JS,我确信我忘了一些东西.
我不太关心快速(并行)加载,我对执行顺序更感兴趣(这可能取决于加载顺序和文档顺序).是否有一个很好的(跨浏览器)参考,涵盖所有情况?例如http://www.websiteoptimization.com/speed/tweak/defer/仅处理其中的6个,并且主要测试旧浏览器.
我担心没有,这是我的具体问题:我有一些(外部)头脚本用于初始化和脚本加载.然后我在身体的末尾有两个静态的内联脚本.第一个允许脚本加载器动态地将另一个脚本元素(引用外部js)附加到正文.第二个静态内联脚本想要使用添加的外部脚本中的js.它可以依赖于已执行的其他(以及为什么:-)?
调用静态方法的标准方法是什么?我可以考虑使用constructor或使用类本身的名称,我不喜欢后者,因为它没有必要.前者是推荐的方式,还是还有其他的东西?
这是一个(人为的)例子:
class SomeObject {
constructor(n){
this.n = n;
}
static print(n){
console.log(n);
}
printN(){
this.constructor.print(this.n);
}
}
Run Code Online (Sandbox Code Playgroud) 在ES6中我们可以做匿名类:
var entity = class {
}
Run Code Online (Sandbox Code Playgroud)
但我们也可以实例化它:
var entity = new class {
constructor(name) { this.name = name; }
getName() { return this.name; }
}('Foo');
console.log(entity.getName()); // Foo
Run Code Online (Sandbox Code Playgroud)
背后做了什么,它带来了什么好处以及它带来了什么警告?
javascript oop anonymous-function javascript-objects ecmascript-6
理想情况下,我想做类似以下的事情:
class Chess = {
constructor() {
this.board = ...;
...
};
class Square = {
constructor(row, col) {
this.row = row;
this.col = col;
};
};
Run Code Online (Sandbox Code Playgroud)
我的主要动机是,将 Chess 和 Square 类分别定义为:(这指的是 Chess 类)
this.empty(square)
Run Code Online (Sandbox Code Playgroud)
可以缩短为
square.empty()
Run Code Online (Sandbox Code Playgroud)
这更具可读性和更简洁。
不幸的是我不能只做一个
Square.empty()
Run Code Online (Sandbox Code Playgroud)
方法,因为结果取决于 Chess 类中的信息,并且
square.empty(chess)
Run Code Online (Sandbox Code Playgroud)
是没有真正的改善。
我有 Square 课程的原因是这样的
square.up()
Run Code Online (Sandbox Code Playgroud)
看起来比类似的东西好得多
[row, col + 1]
Run Code Online (Sandbox Code Playgroud)
您对我如何实现上述目标有什么建议吗?有什么方法可以在类中编写类或者完全是其他东西吗?
编辑:
根据 likele 和 alex 的建议,我做了以下事情:
我向 Class Square 添加了一个上下文属性
class Square = {
constructor(context, row, col) {
this.context = context;
this.row = row;
this.col …Run Code Online (Sandbox Code Playgroud) 我正在处理的一个项目目前已经调用了一个对象类型Chain,它本身只生成一种Link只使用它的对象.在之前的项目中,我已经嵌套了构造函数Link内部的对象构造函数和原型Chain,但是,我开始怀疑这次是否是最好的方法,因为我实际上似乎是Chain用它自己的定义设置每个的Link每一次.
为清楚起见,这是我原来的代码:
var Chain = function() {
var self = this;
var Link = function(key) {
this.prop = key;
};
Link.prototype.attach = function(args) {
for (let value of args) {
this[value.prop] = value.value;
}
};
self.links = [];
}
Chain.prototype.add = function(key) {
this.links.push(new Link(key));
}
Run Code Online (Sandbox Code Playgroud)
然后我开始想知道我是否应该将Link构造函数和原型存储在野外(就像我一样)Chain(对于记录,它不是在野外,它实际上包含在一个对象中)或者我是否应该使用原型Chain定义Link并保持它.
在这种情况下,我没有找到关于最佳实践的大量信息,虽然我强烈怀疑我的第一种做事方式不是最佳/正确的方式; 我不确定我的替代品是否也是.
所以我想问一下,这样做的最佳实践/最有效/最明智的方法是什么?
在尝试找到一种在 JS 中使用嵌套类的方法时,我想到了这样的事情:
class Character {
constructor() {
this.Info= class I {
constructor(name,value) {
this.name=name;
this.value=value;
}
};
}
bar () {
var trial = new this.Info("Goofy", 2);
alert(trial.name);
}
}
var test = new Character();
test.bar();
Run Code Online (Sandbox Code Playgroud)
这似乎有效。但是,我担心这可能会为每次调用创建一个新的函数对象new,因为我在构造函数中定义了该类(在每次new调用时执行)。有没有更有效的方法来做到这一点?
这个问题并没有解决我的问题,因为作者只是想知道如何嵌套class; 我已经能够做到这一点,但我想知道是否有更有效的方法。
javascript ×6
class ×3
oop ×3
ecmascript-6 ×2
es6-class ×1
load-order ×1
nested ×1
object ×1
static ×1