一、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 指向的是什么?

















