JavaScript里类的相关知识

function start(a,b){
    this.a=a;
    this.b=b;
    this.c=function(){
        console.log(this.a+this.b);
    }
}
var b=new start(1,2)

这里写图片描述

1.对象
1.1 创建对象
总的说来就三种形式:
直接量:var a={x:0,y:0}
通过new构造函数
通过Object.create()
但细分又有很多种,可以看我的这篇博客

2.原型
每一个JavaScript对象都与另一个对象相关联,“另一个对象”即为原型
通过关键词new+构造函数方式创建的对象的原型就是构造函数的prototype属性值
b.__proto__==start.prototype => true
这里写图片描述

3.prototype和[[Prototype]]
[[Prototype]],这个是实例中拥有的属性,它是一个指针,指向构造函数的原型,它是“内部的”,这个特性是为了实现Javascript引擎用的,因此在Javascript中不能直接访问它,同时为了表示特性是内部值,用两个方括号加以区分。Firefox,Safari,Chrome在每个对象上面都支持一个__proto__,可以当做[[Prototype]]。
prototype是构造函数中的属性,它也是一个指针,也指向构造函数原型。但它是可见的。任何js函数都可以作为构造函数,因此每个js函数都会自动拥有一个prototype

b.prototype => undefined
b.__proto__ => 输出一个对象
start.prototype => 输出一个对象

var c={};
c.__proto__=b;
c.a => 1;
b.e=12;
c.e=12;

start.prototype.what=function(){return this.a*this.b};
b.what() => 2;
c.what() => 2;

这里写图片描述
这里写图片描述

4.constructor属性
每个js函数都会自动拥有一个prototype属性,该属性的值是一个对象,这个对象包含一个不可枚举属性constructor,而且这个属性的值是一个函数对象
这里写图片描述
*what属性是上一步添加的
通过构造函数创建的对象会继承这个属性,且属性值指代它们的构造函数
这里写图片描述

5.类的扩充
如果创建对象之后原型的属性发生改变,也会影响到继承这个原型的所有实例。之前第三小节举的例子就是对类的扩充

6.instanceof运算符
该运算符左操作数是待检测其类的对象,右操作数是定义类的构造函数。如果o继承自c.prototype,则表达式值为true
这里写图片描述
*未完待续

发布了66 篇原创文章 · 获赞 47 · 访问量 32万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章