这似乎不一致,但可能是因为我是javascript原型继承功能的新手.
基本上,我有两个基类属性,"列表"和"名称".我实例化两个子类并为属性赋值.当我实例化第二个子类时,它从第一个子类实例获取列表值,但仅用于"列表"而不用于"名称".这是怎么回事??当然,我希望任何后续的子类实例都不会从其他实例获取值,但如果这种情况发生,它应该是一致的!
这是一段代码:
function A()
{
this.list = [];
this.name = "A";
}
function B()
{
}
B.prototype = new A();
var obj1 = new B();
obj1.list.push("From obj1");
obj1.name = "obj1";
var obj2 = new B();
//output:
//Obj2 list has 1 items and name is A
//so, the name property of A did not get replicated, but the list did
alert("Obj2 list has " + obj2.list.length + " items and name is "+ obj2.name);
Run Code Online (Sandbox Code Playgroud) 我编写了一个 JavaScript 库作为 ES6 模块,主要用于浏览器。现在我想将它打包为节点。我同意限制为节点 v 14+。我不想转译。
我不确定如何处理依赖关系。其中一个特别是 moment-js,给我带来了麻烦。
在浏览器中(尝试了最新的 FF + Chrome),我在标签中引用了 moment 库<script>,然后在我的代码中,我可以只使用变量moment,而不必先导入它。
my-module.js:
function testFn() {
return moment.duration(300).asSeconds();
}
export { testFn }
Run Code Online (Sandbox Code Playgroud)
browser code:
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.26.0/moment.min.js"></script>
<script type="module" src="my-module.js"></script>
<script>
import { testFn } from 'my-module.js';
let val = testFn();
console.log(val);
</script>
Run Code Online (Sandbox Code Playgroud)
但是,在节点中,我需要模块包含一个import才能使其工作:
my-module.js:
import moment from 'moment';
function testFn() {
return moment.duration(300).asSeconds();
}
export { testFn }
Run Code Online (Sandbox Code Playgroud)
my-module然后我可以在节点中使用:
import { testFn } from 'my-module.js';
let …Run Code Online (Sandbox Code Playgroud) javascript ×2
browser ×1
ecmascript-6 ×1
inheritance ×1
node-modules ×1
node.js ×1
prototype ×1