Javascript “的语法;扩展;ECMAScript 6中的原型

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

由于ECMAScript 6中的类只是JavaScript现有基于原型的继承的语法糖,因此仍然可以使用EMCAScript 5语法“扩展”(因为没有更好的词)现有类的原型,并在完全独立的文件中声明类之后向其添加方法

/* 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。

不一定<代码>扩展意味着新类将继承旧类拥有的所有内容,而不会使用新属性扩展旧类。为此,你必须用新的属性“扩展”对象,或者它的原型。不是真的<代码>扩展意味着新类将继承旧类拥有的所有内容,而不会使用新属性扩展旧类。为此,您必须使用新属性“扩展”对象或其原型。