Javascript “的语法;扩展;ECMAScript 6中的原型
由于ECMAScript 6中的类只是JavaScript现有基于原型的继承的语法糖,因此仍然可以使用EMCAScript 5语法“扩展”(因为没有更好的词)现有类的原型,并在完全独立的文件中声明类之后向其添加方法Javascript “的语法;扩展;ECMAScript 6中的原型,javascript,syntax,ecmascript-6,Javascript,Syntax,Ecmascript 6,由于ECMAScript 6中的类只是JavaScript现有基于原型的继承的语法糖,因此仍然可以使用EMCAScript 5语法“扩展”(因为没有更好的词)现有类的原型,并在完全独立的文件中声明类之后向其添加方法 /* Dog.js */ class Dog { woof() { console.log('woof woof'); } } module.exports = Dog; /* main.js */ var Dog = require('./D
/* Dog.js */
class Dog {
woof() {
console.log('woof woof');
}
}
module.exports = Dog;
/* main.js */
var Dog = require('./Dog');
Dog.prototype.bark = function() {
console.log('bark bark');
};
var dog = new Dog();
dog.woof(); // 'woof woof'
dog.bark(); // 'bark bark'
有没有办法实现与上述相同的功能,但在main.js
中维护ECMAScript 6类语法,而不是返回原型语法?尝试类Dog extensed Dog
会抛出错误,因为Dog
类已声明
请注意,这不是继承意义上的扩展,因为这需要创建一个新类,而不是向现有类添加方法
class Dog {
woof() {
console.log('woof woof');
}
}
class AdvancedDog extends Dog {
bark() {
console.log('bark bark');
}
}
var dog = new Dog();
dog.woof(); // 'woof woof'
dog.bark(); // Error, not what is needed.
不,没有办法做你想做的事 不能跨多个文件部分声明类 顺便说一句,您应该能够使用一些任务运行程序,如Grunt或Gulp,并实现一个任务来合并多个声明同一文件的文件,这些文件可以生成一个单独的文件,其中包含来自其他文件的单个类声明
可能这也可以作为一个插件来实现。不,没有办法实现您想要实现的目标 不能跨多个文件部分声明类 顺便说一句,您应该能够使用一些任务运行程序,如Grunt或Gulp,并实现一个任务来合并多个声明同一文件的文件,这些文件可以生成一个单独的文件,其中包含来自其他文件的单个类声明
可能这也可以作为插件实现。扩展的语义是原型继承,而想要的行为是原型修改。它不是日常任务,也不是ES6中有特殊语法的东西 这是有可能做到的
Object.assign(Dog.prototype, {
bark() {
console.log('bark bark');
}
});
请注意,对象文字中的
bark
方法是可枚举的,而。如果这一特性很关键,则应另外使用Object.defineProperty
。扩展的语义是原型继承,而想要的行为是原型修改。它不是日常任务,也不是ES6中有特殊语法的东西
这是有可能做到的
Object.assign(Dog.prototype, {
bark() {
console.log('bark bark');
}
});
请注意,对象文字中的
bark
方法是可枚举的,而。如果这一特性很重要,则应另外使用Object.defineProperty。不一定<代码>扩展意味着新类将继承旧类拥有的所有内容,而不会使用新属性扩展旧类。为此,你必须用新的属性“扩展”对象,或者它的原型。不是真的<代码>扩展意味着新类将继承旧类拥有的所有内容,而不会使用新属性扩展旧类。为此,您必须使用新属性“扩展”对象或其原型。