您的位置:首页 > Web前端 > JavaScript

JavaScript里类的相关知识

2017-10-07 20:02 267 查看
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



*未完待续
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: