Javascript继承,成员未定义
Javascript inheritance, member undefined
我正在一个名为 Animation.js 的文件中创建一个 "class":
function Animation(s) {
this.span = s;
};
Animation.prototype = Object.create(Animation.prototype);
Animation.prototype.constructor = Animation;
然后我创建了一个子项 class,它位于一个名为 LinearAnimation.js:
的文件中
function LinearAnimation(s, cP) {
Animation.call(s);
this.controlPoints = cP;
};
LinearAnimation.prototype = Object.create(Animation.prototype);
LinearAnimation.prototype.constructor = LinearAnimation;
问题是,当我访问 LinearAnimation class 中的 this.span
成员时,它说它是 undefined
。我执行得好吗?谢谢。
你想要 Animation.call(this, s)
,而不是 Animation.call(s)
。 call
的第一个参数为函数调用设置 this
。在您的代码中,您使用 this
的 s
调用 Animation
,因此您的 s
参数得到 span
属性,而不是this
正在 LinearAniamtion
.
中构建
Function.prototype.call()
函数将 thisArg 作为第一个参数,即被调用函数中的 this
。之后,任何其他参数(是..)作为输入传递给被调用函数。
此外,用从其自身继承的对象替换函数原型 (class) 毫无意义。
试试这个:
function Animation(s) {
this.span = s;
};
function LinearAnimation(s, cP) {
Animation.call(this, s);
this.controlPoints = cP;
};
LinearAnimation.prototype = Object.create(Animation.prototype);
LinearAnimation.prototype.constructor = LinearAnimation;
var la = new LinearAnimation('something', [1, 2, 3]);
console.log(la);
我正在一个名为 Animation.js 的文件中创建一个 "class":
function Animation(s) {
this.span = s;
};
Animation.prototype = Object.create(Animation.prototype);
Animation.prototype.constructor = Animation;
然后我创建了一个子项 class,它位于一个名为 LinearAnimation.js:
的文件中function LinearAnimation(s, cP) {
Animation.call(s);
this.controlPoints = cP;
};
LinearAnimation.prototype = Object.create(Animation.prototype);
LinearAnimation.prototype.constructor = LinearAnimation;
问题是,当我访问 LinearAnimation class 中的 this.span
成员时,它说它是 undefined
。我执行得好吗?谢谢。
你想要 Animation.call(this, s)
,而不是 Animation.call(s)
。 call
的第一个参数为函数调用设置 this
。在您的代码中,您使用 this
的 s
调用 Animation
,因此您的 s
参数得到 span
属性,而不是this
正在 LinearAniamtion
.
Function.prototype.call()
函数将 thisArg 作为第一个参数,即被调用函数中的 this
。之后,任何其他参数(是..)作为输入传递给被调用函数。
此外,用从其自身继承的对象替换函数原型 (class) 毫无意义。
试试这个:
function Animation(s) {
this.span = s;
};
function LinearAnimation(s, cP) {
Animation.call(this, s);
this.controlPoints = cP;
};
LinearAnimation.prototype = Object.create(Animation.prototype);
LinearAnimation.prototype.constructor = LinearAnimation;
var la = new LinearAnimation('something', [1, 2, 3]);
console.log(la);