一、call、apply可以翻译成继承或者借调 区别:传参不同
- 可以调用函数
- 可以改变函数中this的指向
二、js 语法词法:
- 普通函数
构造函数:
- 为什么不在构造函数中写方法
function Student(n, a) {
this.uname = n;
this.age = a;
this.sayHi = function () {
console.log('大家好', this.uname);
}
}
// sayHi = function () {
// console.log('大家好', this.uname);
// }
// // 二.在原型中定义方法
// Student.prototype.sayHi = function () {
// console.log('大家好');
// 三.实例化对象
var stu = new Student('xiaoming', 20);
var stu1 = new Student('xiaomei', 18);
// console.log(stu.sayHi)
// console.log(sayHi())
// 四.测试
console.log(stu.sayHi === stu1.sayHi); false
只要new 一次 就会新开一个新的空间地址 如果有1万个 就会开1万个空间地址,就会浪费地址资源,所以不在构造函数中写方法,那如何解决这个问题呢 就是使用原型对象解决
解决方法是(也不支持):这样写虽然显示true 但是作为普通函数就会出现undeinfd
function Student(n, a) {
this.uname = n;
this.age = a;
this.sayHi = sayHi
}
sayHi = function () {
console.log('大家好', this.uname);
}
// // 二.在原型中定义方法
// Student.prototype.sayHi = function () {
// console.log('大家好');
// 三.实例化对象
var stu = new Student('xiaoming', 20);
var stu1 = new Student('xiaomei', 18);
stu.sayHi()
sayHi() //如果拿普通方法去调用的时候 就会出现大家好 undefind
// 四.测试
console.log(stu.sayHi === stu1.sayHi); true
所以针对上面这些问题的想法 共享方法就是从原型对象上处理
原型对象
实例对象
原型模式:方法共享
构造函数与原型对象的关系 函数一定有一个prototype 实例对象(对象)一定有_proto_ 他俩是相等的
实例对象与原型对象的关系
在构造函数中定义属性
在原型中定义方法
只要是引用类型都存在__proto__ 属性 哪些是引用类型?对象 数组 函数
只要是函数类型都存在 prototype
函数的__proto__指向的是什么?
函数的prototype 指向的是什么?