原型对象:
一般的调用
function Person(name, age){
= name;
this.age = age;
this.sleep = function (){
console.log("is sleeping")
}
}
let aaa = new Person("admin", 123);
console.log()
console.log(aaa.age)
aaa.sleep()
prototype调用
function Person(name, age){
= name;
this.age = age;
this.sleep = function (){
console.log("is sleeping")
}
}
let aaa = new Person("admin", 123);
console.log()
console.log(aaa.age)
aaa.sleep()
// 函数对象通过prototype容器设置公共属性和方法
Person.prototype.eat = function (food){
console.log( + " eat " + food);
}
aaa.eat("apple")
关系:
function Person(name, age){
= name;
this.age = age;
this.sleep = function (){
console.log("is sleeping")
}
}
let aaa = new Person("admin", 123);
console.log()
console.log(aaa.age)
aaa.sleep()
// 函数对象通过prototype容器设置公共属性和方法
Person.prototype.eat = function (food){
console.log( + " eat " + food);
}
aaa.eat("apple")
// 对象通过'__proto__'属性,指向原型对象
console.log(aaa.__proto__)
console.log()
console.log(aaa.__proto__.constructor)
// 函数和原型对象的关系
console.log("===========")
console.log(Person.prototype)
let bbb = Person.prototype
console.log(bbb.constructor)
对象和原型对象和函数之间的关系
- 函数创建对象
var o = new Fn();
- 对象通过
__proto__
属性,指向原型对象.- 对象可以直接调用原型对象中所有的属性和方法.
- 对象可以通过原型对象中的constructor属性知道构造函数
- 总结: 原型对象就是一个容器,帮助函数存放公共方法,以及给函数new出来的对象提供公共方法使用.
call和apply方法
call,apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.prototype,所以每个Function对象实例(就是每个方法)都有call,apply属性。既然作为方法的属性,那它们的使用就当然是针对方法的了,这两个方法是容易混淆的,因为它们的作用一样,只是使用方式不同。
prototype调用:
function Person(name, age){
= name;
this.age = age;
Person.prototype.eat = function (){
console.log( + " eat banana");
}
}
aaa = new Person("admin", 55)
aaa.eat()
call 和apply
function Person(name, age){
= name;
this.age = age;
}
aaa = new Person("admin", 22)
function eat(){
console.log( + " eat banana")
}
eat.call(aaa)
eat.apply(aaa)
function Person(name, age){
= name;
this.age = age;
}
aaa = new Person("admin", 55)
function eat(a, b, c){
console.log( + " eat banana")
console.log(a, b, c)
}
// apply传递多个参数的时候第二个参数需要传递一个数组
eat.call(aaa, "qqq", "www", "eee")
console.log("==================")
eat.apply(aaa, ["qqq", "www", "eee"])