Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 您能否更改ES6类定义以附加新的实例方法?_Javascript_Class_Methods_Ecmascript 6 - Fatal编程技术网

Javascript 您能否更改ES6类定义以附加新的实例方法?

Javascript 您能否更改ES6类定义以附加新的实例方法?,javascript,class,methods,ecmascript-6,Javascript,Class,Methods,Ecmascript 6,是否有任何方法可以追溯(即在类已经定义之后)向ES6类添加实例方法 考虑以下类别: class Thing {} 现在我想将hello方法附加到Thing,然后可以在其实例上调用该方法,如下所示: let thing = new Thing(); thing.hello(); 可能吗 (当然,我可以创建一个子类,但这不是我在这里要问的。)只需使用原型,就像在ES5中一样: class Thing { hello () { console.log('Hey!'); } } v

是否有任何方法可以追溯(即在类已经定义之后)向ES6类添加实例方法

考虑以下类别:

class Thing {}
现在我想将
hello
方法附加到
Thing
,然后可以在其实例上调用该方法,如下所示:

let thing = new Thing();
thing.hello();
可能吗


(当然,我可以创建一个子类,但这不是我在这里要问的。)

只需使用
原型,就像在ES5中一样:

class Thing {
  hello () {
    console.log('Hey!');
  }
}

var t = new Thing();

t.hello(); // Hey!

Thing.prototype.goodbye = function () {
  console.log('Bye!');
}

t.goodbye(); // Bye!
或者您可以使用

Object.assign(Thing.prototype, {
    hello(arg1, arg2) {
        // magic goes here
    }
});
这相当于

Thing.prototype.hello = function (arg1, arg2) {
    // magic goes here
};

不完全等效-您使用的是方法声明。哦,
super
也不行。@Bergi:aah。现在明白了。感谢您让我知道:)原型继承的工作原理与ES5相同。只需添加另一个属性。不过,添加一个方法(在ES6意义上)使其与在类文本中声明的方法一样工作是很困难的。