Javascript寄生构造函数似乎无法向对象添加函数,为什么

时间:2016-08-19 05:08:19

标签: javascript constructor prototype creation

我从互联网上得到这个例子,使用寄生构造函数来构建一个对象,包括给它一个额外的功能:

% gnatmake so.ads
gcc-4.9 -c -gnata -gnato -fstack-check -gnat12 -gnatyO -gnatv -gnati1 -gnatf -gnatn so.ads

GNAT 4.9.2
Copyright 1992-2014, Free Software Foundation, Inc.

Compiling: so.ads (source file time stamp: 2016-08-19 05:05:16)
 3 lines: No errors
%

代码运行时有一个例外:

function SpecialArray(){
    var values=new Array();
    values.push.apply(values, arguments);
    values.toPipedString=function(){
        return this.join("|");
    }
}

var colors=new SpecialArray("red", "blue", "green");
console.log(colors.toPipedString());

但我认为我已将该功能附加到该对象。为什么它说功能不存在?

感谢。

2 个答案:

答案 0 :(得分:3)

您将toPipedString函数附加到内部var。 试试这个:

function SpecialArray() {
    var values=new Array();
    values.push.apply(values, arguments);
    this.toPipedString = function() {
        return values.join("|");
    }
}

var colors = new SpecialArray("red", "blue", "green");
console.log(colors.toPipedString());

答案 1 :(得分:1)

如果你想将toPipedArray作为specialArray的函数调用,它需要在特殊数组的原型上。

function SpecialArray(){
    this.values=new Array();
    this.values.push.apply(this.values, arguments);

}
SpecialArray.prototype.toPipedString = function(){
    return this.values.join("|");
}
var colors=new SpecialArray("red", "blue", "green");
console.log(colors.toPipedString());

Nosyara的方法也适用。在函数/对象中使用this.Myfunction也会将myFunction放在原型上。