let module = {
add: function(a, b){
return parseInt(a) + parseInt(b);
},
sub(a, b){
return parseInt(a) - parseInt(b);
}
};
使用这两种方法的根本区别是什么concise方法语法,例如sub
与传统的acove相比不简洁使用的方法语法add
?
除了语法之间的明显差异之外,还有concise and 不简洁方法本质上是一样的吗?
一个显着的区别是concise方法可以利用super关键字和不简洁 (aka: 传统的) 方法不能。当改变对象原型来帮助时,这变得相关遗产.
为了证明这一点,请考虑以下要点:
Example:
const frenchPerson = {
speak() {
return 'Bonjour';
}
};
const englishPerson = {
speak() {
return 'Hello';
}
};
const multilinguist = {
speak() {
return `${super.speak()}, Hola`
}
};
console.log(frenchPerson.speak()) // -> "Bonjour"
console.log(englishPerson.speak()) // -> "Hello"
Object.setPrototypeOf(multilinguist, frenchPerson);
console.log(Object.getPrototypeOf(multilinguist) === frenchPerson); // true
console.log(multilinguist.speak()); // -> "Bonjour, Hola"
Object.setPrototypeOf(multilinguist, englishPerson);
console.log(Object.getPrototypeOf(multilinguist) === englishPerson); // true
console.log(multilinguist.speak()); // -> "Hello, Hola"
解释:
首先记下所有物体;frenchPerson
, englishPerson
, and multilinguist
,利用concise方法语法。
如您所见,concise方法名为speak
of the multilinguist
对象利用super.speak()
指向它的对象原型(无论哪个)。
-
设定原型后multilinguist
to frenchPerson
我们调用multilinguist
's speak()
方法 - 回复/记录:
Bonjour, Hola
-
然后我们设置原型multilinguist
to englishPerson
并询问multilinguist
to speak()
再次 - 这次它回复/记录:
Hello, Hola
当发生什么multilinguist
's speak()
方法是不简洁?
当使用不简洁 speak()
方法中的multilinguist
对象除了super
它返回的引用:
Syntax Error
如下例所示:
const englishPerson = {
speak() {
return 'Hello';
}
};
const multilinguist = {
speak: function() { // <--- non-concise method
return `${super.speak()}, Hola`
}
};
Object.setPrototypeOf(multilinguist, englishPerson);
console.log(multilinguist.speak()); // -> Syntax Error
附加说明:
为了实现上述目标不简洁方法;call()可以用作替代品super
如下所示:
const englishPerson = {
speak() {
return 'Hello';
}
};
// Non-concise method utilizing `call` instead of `super`
const multilinguist = {
speak: function() {
return `${Object.getPrototypeOf(this).speak.call(this)}, Hola!`
}
};
Object.setPrototypeOf(multilinguist, englishPerson);
console.log(multilinguist.speak()); // -> "Hello, Hola!"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)