js学习笔记(七)对象
1、对象的创建
通过new关键字,如 var a=new Object(); //创建了一个空对象
通过对象直接量,如 var a={}; //同样是创建了一个空对象
通过对象直接量创建时还可以初始化对象,如 var a={x:100,y:”hello”}
对象的属性可以动态创建或添加,如 a.z=10000 //给对象a创建了一个新属性z
2、构造函数
构造函数可以理解为其他编程语言中的类,在实例化这个类时,要使用new运算符。
function Rectangle(w,h){
this.width=w; //类的属性,this指代的是实例化时的那个具体对象
this.height=h;
this.area=function(){return this.width*this.height} //类的方法
}
var a=new Rectangle(2,3); //实例化一个对象,括号中的参数可以初始化这个对象
var b=new Rectangle(4,6); //实例化另一个对象,用的是同一个类(也就是构造函数)
3、对象的方法
方法其实就是一个函数,区别在于方法可以使用this关键字,而普通函数一般不使用。
在这里的this关键字指代的是调用这个方法的对象(当然前提是这个对象有这个方法),因此,可以理解为函数中(不管是方法函数还是普通函数)一旦有this关键字,那么它指代的就是调用这个函数的对象。其实我们可以把普通函数看成是windows全局对象的方法,因此,作为普通函数运行时(即不是某个对象(windows对象除外)的方法)期中的this代表的就是windows对象。
4、原型对象和继承
每一个对象都有原型对象,对象会继承其原型对象的所有属性或方法。对象原型是由构造函数定义的。对象的原型对象用 a.prototype来引用(a是一个构造函数)
当在读对象a的某个属性时,系统会首先检查a有没有定义这个属性,如果没有则检查其原型(即a.prototype)中有没有定义这个属性。当改变a对象中没有定义而其原型中定义了的某个属性时(如a.x中的x属性是a对象的原型中定义的,a中并没有直接定义),如果改变a.x的值,并不会影响到其原型中的x属性的值(因为如果原型中的值一旦改变,则其影响的就可能会是很多的对象了,而不仅仅是当前这一对象),所以这时系统会为a对象自动添加一个x的属性(就相当于覆盖掉了其原型对象中的x属性的值)。
即使属性在被创建之后才添加到它的原型对象中,对象也能够继承这些属性。
假设我们定义了一个构造函数a(),那么它的原型对象就是a.prototype,我们可以为他添加属性或方法,比如a.prototype.x=10000,则所有用构造函数a实例化的对象都可以继承到x这个属性。
实际上构造函数和对象原型是模拟了其他编程语言中的类和继承
5、原型和内部类
不只是用户定义的类具有原型对象,像String、Date这样的内部类同样具有原型对象,你也可以给它们赋值,例如下面的代码定义了一个新方法,它适用于所有String对象。
String.prototype.a=function(){…} //为String的原型对象定义了一个方法
var m=”hello”; //创建一个字符串
m.a(); //该字符串继承了a()方法
6、命名类(在js中即为构造函数)时以大写字母开头,实例化一个类对象时以小写字母开头。
7、作为关联数组的对象
对象的属性不仅可以用点运算符来引用,也可以以数组的形式来引用,如下两个是等价的:
a.x
a[“x”]
以数组的形式来引用对象的属性更加灵活,因为[]中的属性名是一个字符串类型,所以可以用一个变量来代替,也就是说可以通过改变变量的值动态的引用不同的对象属性
8、对象的属性和方法
每个对象都有constructor属性,用来表示实例化该对象的构造函数,例如,构造函数Complex()创建了一个对象o,那么属性o.constructor表示的就是Complex
对象的toString()方法返回的是一个字符串,该字符串代表了调用它的对象的类型或值,当需要把一个对象转化成字符串时,就会调用这个方法。不同的对象用toString()返回的内容不同,如数组得到的是一个数组元素列表,函数得到的是该函数的原代码。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!