此刻想法:
接触前端开发两年了,虽然实际工作中编写代码没有问题,但是对于前端的一些基础知识点掌握得的确不牢固,
每一次仔细琢磨一个知识点,都会有新的领悟。就从这篇文章开始,记录自己的前端学习历程。
重点
1、js所有引用数据类型本质都是对象。
2、对象分为普通对象和函数对象。
3、所有对象都有_proto_属性,指向其构造函数的prototype属性。
4、只有函数对象有prototype属性。
代码示例
function Person(name,age){
this.name = name;
this.age = age;
}
Person.prototype.alertName = function(){
alert(this.name);
}
var p1 = new Person('张三','18');
p1.alertAge = function(){
alert(this.age);
}
var p2 = new Person('李四','20');
p2.alertAge = function(){
alert(this.age);
}
知识点总结:
1、new 操作符具体干了什么?
(1)新建一个空对象
var obj = {};
(2)将Person的protoype属性赋值给obj的_proto_属性
obj._proto = Person.prototype;
(3)将Person的this指向obj,并执行Person函数
Person.call(obj);
(4)返回obj
return obj;
2、构造函数一般首字母大写,用以区分普通的函数。
3、通过把要实现的方法alertName,赋值给构造函数Person的prototype属性,实现了实例p1、p2共享此方法。实现了继承的功能,达到了节省内存的目的。
4、当试图得到一个对象的某个属性时,如果这个对象本身没有该属性,那么会去它的_proto_中寻找。一直往上寻找,就形成了原型链。一直找到最上层,没有则宣告失败,返回undefined。最上层是Object.prototype._proto_值为null。
p1._proto_指向Person.prototype,Person.prototype._proto_指向Object.prototype,
Object.prototype._proto_等于null。
5、函数的prototype属性中的_proto_属性和普通对象的_proto_属性一样,用来对应继承关系。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。