我从互联网上得到这个例子,使用寄生构造函数来构建一个对象,包括给它一个额外的功能:
% 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());
但我认为我已将该功能附加到该对象。为什么它说功能不存在?
感谢。
答案 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
放在原型上。