问一个JS中apply的问题?

image.png

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]吗?

阅读 3.1k
3 个回答

你应该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)

apply 修改构造函数 Person 内部的 this 指向到 obj

不是的,Person.apply(obj,['xiaomings',300])中的参数是一个数组,而不是一个包含多个参数的参数列表。所以应该是Person.apply(obj, ['xiaomings', 300])。这样会将数组中的每个元素依次作为参数传递给 Person 构造函数,并在 obj 上调用该构造函数。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题