不知道为什么这个方法会吐出它吐出的东西
Unsure why method is spitting out what its spitting out
这似乎是一个愚蠢的问题,但
如果我们有一个构造函数:
function Candy(name) {
this.name = name;
}
我们扩展了这个对象Candy的原型:
Candy.prototype.printName = function(name) {
console.log(this.name);
};
然后我们从Candy构造函数创建一个新对象,并为这个新对象运行继承的方法:
var chocolate = new Candy("chocolate");
chocolate.printName();
我不明白为什么我们会把巧克力作为一种输出
当我们从构造函数创建巧克力对象时,我们本质上是这样做的:
var chocolate = new Candy();
chocolate.name = name;
如果是这样,为什么当我们运行时
chocolate.printName();
伴随着一个空白的论点,它吐出:"巧克力"
巧克力不就是我们用糖果结构构建的物体的名字吗
和中一样,chocolate.name参数不是我们指定的,而是name。既然我们通过了一个空的参数字段,为什么我们得到了"chocolate"而没有返回name?
printName
方法中的参数name
从未使用过。要使用指定的签名调用方法,您需要执行以下操作:
chocolate.printName("Fudge");
这将把字符串"Fudge"
作为参数name
发送到方法中,但该参数被忽略,它仍然打印出您为对象指定的名称。
Javascript允许您使用任意数量的参数调用任何函数。如果使用的参数太少,则其余参数的值将仅为undefined
;如果使用太多的参数,则它们将位于arguments
集合中,但不会放入参数变量中。
因此,如果调用chocolate.printName();
,则参数name
的值将为undefined
。如果调用chocolate.printName(1,2,3)
,参数name
的值将为1
,其他值将在函数中作为arguments[1]
和arguments[2]
可用。
我不确定您到底在寻找什么,但如果您添加以下prototype
函数
Candy.prototype.compare = function (obj) {
console.log(this === obj);
}
var chocolate = new Candy();
称之为
chocolate.compare(chocolate);
它将打印真实。因此,当您指定值时
chocolate.name = name; // Asuming name = 'chocolate'
chocolate.printName();
将始终打印name
的值,即巧克力
因为你这样做:
var chocolate = new Candy("chocolate"); // "chocolate" is your argument here
在Candy构造函数中,参数被获取并分配给this.name
。。。
function Candy(name) {
this.name = name; // name is "chocolate" if we use the above
}
然后printname
方法将只返回"chocolate",因为它只是从Candy对象中记录this.name
,您将其定义为传递给Candy()
构造函数的任何参数。
希望这是有道理的。
- 为什么不推荐使用“with”?是否有更好或其他方法可以“下降”到对象的命名空间
- 为什么我得到错误IE修剪方法是't支持
- 为什么我可以在Array属性对象中找到Javascript Array for Each方法
- 为什么谷歌地图API's方法未从RequireJS中正确调用
- 为什么控制台没有't使用输入的对象's的`toString`方法
- 为什么jQuery悬停方法在这种情况下不起作用
- 为什么可以't我使用成员方法初始化一个实例
- 为什么我得到“;没有方法'indexOf'"在ExtJS4.2中尝试在网格上使用缓冲渲染器时出错
- 为什么我的Mongoose findAll方法返回500错误.
- 为什么方法.options对select无效
- 为什么 .on() 方法不执行第一个处理程序
- 为什么不't loadash/aunderline将util方法放在数组原型上
- 为什么't我的角度控制器'在其某个方法内的作用域中的依赖项
- 为什么push方法没有'在这种情况下不起作用:[].推
- 为什么可以't我从hamsters.js内部运行我的方法
- 为什么这个扩展方法不起作用
- 为什么方法总是添加到原型中,而不是在构造函数中定义
- 为什么方法在 sendRequest() 上从自定义对象丢失
- 为什么方法返回0
- 为什么方法没有在JavaScript中运行