js 对象

JS对象与错误类型详解
本文深入探讨JavaScript中的对象概念,包括内部对象、内置对象、宿主对象和自定义对象的区别,以及自有属性、继承属性的检测方法。同时,解析了6种常见的错误类型及其应用场景,如语法错误、引用错误等。

属性(key)的特性:

内部对象(本地对象/普通对象):是有ECMAScript规范定义的对象或类。例如:Array,Function,Date,Boolean,Global,Math,Number,Object,RegExp,String,Error,EvalError,RangeError,ReferenceError,SyntaxError,TypeError。

内置对象:Global,Math。

内部对象需要实例化,内置对象不需要实例化。

宿主对象(浏览器对象):执行js脚本的环境提供的对象,依赖于宿主,带来浏览器兼容性问题,不同的浏览器提供的宿主不同;是由js解释器所嵌入的宿主环境(比如web浏览器)定义的。客户端js中表示网页结构的HTMLElement对象均是宿主对象。既然宿主环境定义的方法可以当成普通的js函数对象,那么宿主对象也可以当成内置对象。

自定义对象:由运行中的js代码创建的对象。

自有属性:是直接在对象中定义的属性。

继承属性:是对象的原型对象中定义的属性。

检测属性: in hasOwnproperty () propertyIsEnumerable()

in:是否是自有属性或继承属性(使用‘!==’判断一个属性是否是undefined)

hasOwnproperty():是否是自有属性,对于继承属性返回false

propertyIsEnumerable()是hasOwnProperty()的增强版,只会检测到自有属性且这个属性的可枚举性为true才会返回true。

对象的三个属性:每个对象都有与之相关的原型(prototype)、类(class)、可扩展性(extensible attribute)

原型属性是在实例对象创建之初就设置好的,(直接量创建,通过new创建,通过Object.create),将对象作为参数传入Object.getPrototypeOf()可以查询它的原型。

注意:通过对象直接量或Object.create()创建的对象还包含一个名为constructor的属性,这个属性指代Object()构造函数,因此,constructor.prototype才是对象直接量的真正原型,但是对于通过Object.create()创建的对象往往不是这样。

检测一个对象是否是另外一个对象的原型,使用isPrototypeOf()方法。例如:通过p.isPrototypeOf(o)来检测p是否是o的原型。

_proto_属性可以直接查询/设置对象的原型,但是不推荐,因为IE和Opera还未实现它(Mozilla,Chrome,Safari已经实现)

类属性是一个自符串,用以表示对象的类型信息。

对象的可扩展性用以表示是否可以给对象添加新属性。

所有内置对象和自定义对象都是显式可扩展的,宿主对象的可扩展性是由js引擎定义的。

通过将对象传入Object.esExtensible()来判断该对象是否可扩展,如果想将对象转为不可扩展的,需要调用Object.preventExtensions(),将待转换的对象作为参数传进去。一但将对象转换为不可扩展的就无法再转回可扩展。

可扩展属性的目的是将对象锁定,以免外界干扰。对象的可扩展性通常和属性的可配置性与可写性配合使用。

对象的方法:

hasOwnProperty(),propertyIsEnumerable(),isPrototypeOf(),Object.create(),Object.getPrototypeOf()

toString()方法没有参数,返回一个调用这个方法的对象值的字符串。

var s={x:1,y:1}.toString()  //=>"[object object]"

对象都包含toLocalString()方法,这个方法返回一个表示对象本地化字符串。

toJSON()方法,Object.prototype实际上没有定义toJSON()方法,但对于需要执行序列化的对象来说,JSON.stringify()方法会调用toJSON方法。

valueOf()和toString()方法类似,将对象转换为原始值而非字符串。

 

错误类型:6种:
SyntaxError:语法错误:
ReferenceError:引用错误:找不到变量
TypeError:类型错误:错误的使用了类型的API
RangeError:范围错误:函数的参数超范围
下面两种出现的情况比较少
EvalError:Eval函数使用错误
URIError:不符合URI的使用标准


什么是构造函数: 描述一类对象的统一结构的函数

什么是对象:程序中专门描述现实中一个具体事物的结构

什么是面向对象:先用对象描述出现现实中的具体事物,再根据需要调用对象中的属性和功能

什么是原型: 保存所有子对象的共有成员的父级对象

原型链: 由各级子对象的__proto__属性,逐级继承,形成的链式结构。

*****面向对象: 封装   继承    多态 

 1. 封装: 将现实中一个具体实物的属性和功能集中定义在一个对象中。——创建一个对象!

  2.继承: 父对象中的成员,子对象无需创建,可直接使用!

  3.多态::同一个事物,在不同情况下表现出不同的样子

    重写: override : 如果子对象觉得父对象的成员不好用
                     可在本地定义同名成员,覆盖父对象的

### 回答1: JavaScript对象编程是指使用JavaScript语言创建和操作对象的过程。在JavaScript中,对象是一种复合数据类型,可以包含属性和方法。对象可以通过字面量、构造函数、原型等方式创建。通过对象编程,可以实现面向对象编程的思想,使代码更加模块化、可维护和可扩展。在JavaScript中,对象是非常重要的概念,掌握对象编程是成为一名优秀的JavaScript开发者的备技能之一。 ### 回答2: JavaScript是一种流行的编程语言,其中面向对象编程(OOP)是其中的重要组成部分。对象是JavaScript编程中最重要的概念之一,它是一种数据类型,通过对象可以轻松地组织和管理数据。JS对象包含了一组属性和方法,可以用来描述某个对象的性质和行为。 在JavaScript中,对象是动态创建的。创建对象的方法有很多,其中最简单的就是使用字面量,例如: var person = { name: 'Tom', age: 20, gender: 'male', sayHi: function() { console.log('Hi, my name is ' + this.name + ',I am ' + this.age + ' years old.') } }; 上面的代码定义了一个名为person的对象,该对象具有属性name、age、gender和方法sayHi。使用字面量创建对象的好处是,可以轻松地在代码中定义对象,而无需使用专门的构造函数。 当然,也可以使用构造函数来创建对象,例如: function Person(name, age, gender) { this.name = name; this.age = age; this.gender = gender; this.sayHi = function() { console.log('Hi, my name is ' + this.name + ',I am ' + this.age + ' years old.') } }; var person = new Person('Tom', 20, 'male'); 上面的代码定义了一个名为Person的构造函数,在创建对象时使用了new关键字来调用该构造函数,返回一个新的person对象。这个对象包含了属性name、age、gender和方法sayHi。 在JavaScript中,对象是可以嵌套的。可以在对象中嵌套其他对象,也可以在对象中嵌套函数,这些函数就是对象的方法。通过对象的嵌套,可以更好地管理数据,使程序更加规范和易于维护。 总之,JavaScript的对象编程是一种强大且灵活的编程方式,通过对象可以轻松地组织和管理数据,从而实现更好的开发效率和代码质量。由于JavaScript的广泛应用,对于对象编程的掌握将有助于开发者更好地掌握这门语言。 ### 回答3: 在JavaScript中,对象是一种基础数据类型,也是语法的重要组成部分。对象是由若干属性构成的,每个属性都是键值对的形式,其中键是字符串类型,值可以是任意的JavaScript数据类型,包括对象。通过定义对象的属性和方法,我们可以在JavaScript中创建功能强大的程序。 JavaScript对象编程有以下几个重要概念: 1. 对象字面量:使用“{}”来定义对象,字符:“:”分割键与值,“,”分割不同键值对。如:var obj = {name: "小明", age: 18}; 2. 访问对象属性:使用“.”操作符访问对象属性。如:obj.name 3. 新增属性:使用“.”或“[]”,如:obj.height = 180; 或 obj['sex'] = 'male'; 4. 删除属性:使用“delete”关键字,如:delete obj.age; 5. 遍历对象属性:使用“for...in...”语句遍历对象属性,如: for(var key in obj) { console.log(key + ": " + obj[key]); } 6. 面向对象编程:JavaScript中也可以实现面向对象编程。定义一个构造函数,然后使用“new”关键字创建对象实例,如: function Person(name, age) { this.name = name; this.age = age; this.sayHello = function () { console.log("Hello, my name is " + this.name + ", I'm " + this.age + " years old."); } } var p = new Person('小明', 18); p.sayHello(); // 输出:Hello, my name is 小明, I'm 18 years old. JavaScript对象编程是非常灵活的,我们可以根据需要动态地定义、操作对象,同时结合面向对象编程,使得JavaScript的代码结构更加清晰有序。掌握好JavaScript对象编程的技巧,可以让我们开发出更高效、更具有扩展性的项目。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值