首先我有两个问题:我最近了解到在ES 6派生类中,如果不调用super(),则"this“不可用。我理解为什么要这样做,但我想知道从概念上讲,是哪段ES6编译代码使" this“不可用。我的意思是,如果我想在ES5中做同样的事情,让“这个”不可用,那该怎么做呢?
第二:为什么我们不能实例化下面的ES6原型方法呢?
class abc{
func(){}
}
var a = new abc()
var b = new a.func()
鉴于这是可行的-
function abc(){}
abc.prototype.func = function(){}
var a = ne
actionscript3.0中的所有对象都是从Object类继承的,但是actionscript3.0编译器似乎不够聪明,无法理解这一点。
看看下面的代码:
package{
public class TestOne{
public function TestOne(){
var t2: TestTwo = new TestTwo();
trace(t2.toString()); // COMPILE TIME ERROR
trace((t2 as Object).toString(); // [object TestTwo]
此操作失败,并显示“X.M不是函数”...
var Y = function () {
this.m = function () {
alert('this is m');
};
};
var X = new function () { };
X.prototype = new Y();
X.m();
如果我跳过X定义中的new关键字,然后在调用m()之前实例化X,那么它肯定会起作用。为什么我不能这样做呢?
当我扩展一个类时,我希望覆盖方法,并像保护的方法一样在某个类中更改它们的可访问性。当我编译它时,它写着:“不兼容的重写”。我不能减少,也不能增加能见度。
减少是没有意义的,我也不需要它,但我能够在中增加方法的可见性。为什么不在ActionScript 3中呢?
public class OldClass
{
protected function doStuff() : void
{}
}
public class NewClass extends OldClass
{
override public function doStuff() : void
{}
}
为什么这个字写的是“拜”而不是“你好”?根据这篇博文中描述的继承链,我认为它会记录“hello”。
class Test {
hello() {
console.log('hello')
}
}
Test.prototype.hello = function(){
console.log('bye')
}
const t = new Test
t.hello()
如果所有实例都共享了原型,为什么它不能工作呢?
var Module = function(){};
Module.prototype.sharedValue = "value";
var a = new Module();
var b = new Module();
a.sharedValue = "other value";
console.log(b.sharedValue) // it prints 'value' and not 'other value'
我尝试用另一个类扩展一个类,后者有它的构造函数覆盖,但是当我实例这个类时,它没有自己的方法,而是有它自己的属性。
下面是一个不能正常工作的示例:
class A {
constructor () {
return {
pi: 3.14
}
}
}
class B extends A {
constructor () {
super();
this.c = 10;
}
d () {}
}
let b = new B();
console.log(
我想我在开始之前就知道了这个问题的答案,但是在Google上搜索了几次之后,我找不到明确的答案。
这个问题假设我们使用Ecmascript 6及更高版本中的类模式。
我最初的信念是那种方法凌驾于
在面向对象编程中,是一种语言特性,它允许子类或子类提供方法的特定实现,该方法已经由其父类或父类提供。
另一方面,方法隐藏(不仅仅是块作用域‘变量跟踪’- )在强类型语言(如C# )中似乎是有意义的,它允许您将‘子类’的实例设置为类型‘基类’,这意味着实例返回到基类方法,而不是任何‘隐藏’方法。
public abstract class BaseClass
{
public virtu
我知道构造函数在java中是不可继承的,我们需要使用super() --超级必须是构造函数中的第一个语句。
但是为什么我不能使用@Override注释呢?
例如:
public class Foo extends Point2D.Double {
@Override // The annotation @Override is disallowed for this location
public Foo(){}
}
如果我有Foo的实例,我永远无法直接调用Point2D.Double.Double()!这种行为完全像重写一样!
我只是不明白为什么我的原型不能工作。当我将类置于主程序之上时,代码将运行,但当我试图将类放在下面并对函数进行原型时,它将不会运行。提前谢谢你。
#include <iostream>
#include <string>
using namespace std;
int whileLoop();
int main (){
myLoop myLoopObj;
myLoopObj.whileLoop();
return 0;
}
class myLoop{
private:
int loop = 0;
int add = 0;
我想做一个类似于ECMAScript 5“冻结”对象的特性,在这里你不能改变它上的任何东西。
是这样做的:
class Fixed(object):
frzn = 'I AM AWESOME'
def holdset(_,val):
_.frzn = _.frzn
print "frozen is frozen not setting to ", val
frozen = property(fset=holdset)
@classme
var a=[1,2,3,4]
function Demo(){}
Array.prototype={
foo:function(){
alert(1)
}
}//a.foo is not a function
Array.prototype.foo=function(){
alert(1)
}//alert(1)
a.foo()
Demo.prototype={
foo:function(){
alert(1)
}
}
var b=new Demo()
b.foo()//alert(1)
为什么Array不能添加带有文字的原型?另外,当我使用构
我总是把类助手理解为扩展类或部分类。它们的作用就像对原始基类代码的扩展。如果我复制代码的接口部分并将其添加到基类中,并将其添加到实现中,代码将以与助手完全相同的方式运行。这让我始终能够理解helpers中的多形性,以及它们为什么不能覆盖基类中的方法等等。
但是我发现这不是完全正确的,因为如果是的话,为什么他们不允许重写基类的祖先-parent的方法呢?
下面是我所指的一个例子(我只将头的代码放在没有实现代码的代码中):
type
TAncestor = class
public
procedure Test; virtual;
end;
TBase = class(