原型链
原型的指向是否可以改变
继承如何实现继承
原型的方式继承
借用构造函数继承
组合继承
拷贝继承
函数的不同表现方式
函数调用的不同的方式
this的指向
函数也是对象
数组中的函数如何使用
**重点**
原型链、不同的继承、原型的另一个作用、this指向要知道到底是谁
//使用对象
//构造函数 做了四件事:1.在内存中申请一块空间 2.把this作为当前实例对象 3.为属性和方法进行赋值 4.为对象做一个返回
function Person(name,age){
//属性
this.name=name;
this.age=age;
this.sayHi=function(){
console.log("hello world!");
};
}
People.prototype.sex="man";
var per=new Person("xiao ming",20);
per.sayHi();
per.sayHii();
//为了共享数据,节省内存空间,是可以把属性和方法通过原型的方式进行赋值
Person.prototype.sayHii=function(){
console.log("hello world");
}
//实例对象中的__proto__原型指向的是构造函数中的原型prototype
console.log(per.__proto__==Person.prototype);
//实例对象中的__proto__是原型,浏览器使用
//构造函数中的prototype是原型,程序员使用
//原型链:是一种关系,实例对象和原型之间的关系
原型指向可以改变:
//构造函数中的this就是实例对象
//原型对象中方法的this就是实例对象
//实例对象和原型对象之前的关系是通过__proto__原型来联系起来的,这个关系就是原型链
原型最终指向的是哪里?
//per 实例对象的__proto__原型指向的是-------->Person.prototype的__proto__-------->Object.prototype.__proto__是null
原型指向改变如何添加方法: 如果原型指向改变了,在改变之后添加原型方法
实例对象和原型对象属性重名的问题?
实例对象访问这个属性,应该先从实例对象中找,找到了直接用,找不到就去指向的原型对象中找,找到就是用,
用过实例对象能否改变原型对象中的属性值? 不能 直接通过.prototype 改变
一个神奇的原型链:(实例对象和原型对象之间的关系,通过__proto__来联系)
继承:
面向对象的编程思想:需求--分析对象--特征、行为--构造函数创建对象,通过对象调用属性和方法来实现相应功能及需求
面向对象的特性:封装、继承、多态
封装:
1.一个值存储在一个变量中
2.一坨重复的代码放在一个函数中
3.一系列属性放在一个对象中
4.一些功能类似的函数(方法)放在一个对象中
5.好多类似的对象放在一个js文件中
继承:是一种关系,类与类之间的关系,js中通过构造函数模拟类,然后通过原型实现继承
继承也是为了实现数据共享,js中的继承也是为了实现数据的共享
作用1:数据共享,节省内存空间
作用2:为了实现继承
多态:一个对象有不同的行为,或者是同一个行为的不同对象,产生不同的结果
<script>
function Person(name,age,sex){
this.name=name;
this.age=age;
this.sex=sex;
}
Person.prototype.eat=function(){
console.log("eat at dinner");
}
function Student(score){
this.score=score;
}
Student.prototype=new Person("xiaoming",20,"man");
Student.prototype.study=function(){
console.log("study at AM00");
}
var student=new Student(90);
console.log(student.name);
console.log(student.age);
console.log(student.sex);
console.log(student.score);
student.eat();
student.study();
console.dir(student)
</script>