function Person(name,age){
this.name = name;
this.age = age;
}
var person = new Person("xiaoming",100);
var obj = {}
Person.apply(obj,['xiaomings',300]);
console.log(person)
不是应该为['xiaomings',300]吗?
function Person(name,age){
this.name = name;
this.age = age;
}
var person = new Person("xiaoming",100);
var obj = {}
Person.apply(obj,['xiaomings',300]);
console.log(person)
不是应该为['xiaomings',300]吗?
不是的,Person.apply(obj,['xiaomings',300])
中的参数是一个数组,而不是一个包含多个参数的参数列表。所以应该是Person.apply(obj, ['xiaomings', 300])
。这样会将数组中的每个元素依次作为参数传递给 Person
构造函数,并在 obj
上调用该构造函数。
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
你应该
console.log(obj)
, 这样会打印{"name":"xiaomings","age":300}
,先通过
new Person("xiaoming", 100)
创建了一个新的person
对象,该对象是"name":"xiaoming","age":100}
, 你后面Person.apply
与person
对象是没有任何关系的apply:方法能劫持另外一个对象的方法,继承另外一个对象的属性.
Function.apply(obj,args)
方法能接收两个参数obj:这个对象将代替Function类里this对象
args:这个是数组,它将作为参数传给Function(args-->arguments)