面向对象精要-理解对象

1、创建对象

创建对象的两种方法:

使用Object构造函数

var person2 = new Object();
person2.name="Qian";

使用对象的字面形式

var person1={
    name:"Qian"
};

对象添加以及修改时JavaScript会在对象上调用[[Put]][[Set]]方法

2、属性探测

2.1、使用“in”操作符

console.log("name" in person1)/*true*/

2.2、使用“hasOwnProperty()”方法

console.log(person1.hasOwnProperty("name"))/*true*/

3、删除属性

var person1={
    name:"Qian"
};
delete person1.name;
console.log(person1.hasOwnProperty("name"))/*false*/

4、枚举属性

for-in:可枚举属性的内部特征都被设置为true,for-in循环会枚举一个对象所有的可没经验属性并将属性名赋给一个变量

var person1 = {
    name:"Qian",
    age:12
}
for(var item in person1){
    console.log(item)/*name    age*/
}

Object.keys():获取一个对象的属性列表已备程序使用

var person1 = {
    name:"Qian",
    age:12
};
var properties = Object.keys(person1);
for(var i=0;i<properties.length;i++){
    console.log(i)
}

5、属性类型

数据属性:包含一个

访问器属性:包含一个函数

6、属性特征

通用特征:

是否可遍历:[[Enumerable]]

是否可配置:[[Configurable]]---------->可以用delete删除

修改属性特征:Object.defineProperty()方法

例:修改某个对象属性使其变成不可以枚举且不可配置

Object.defineProperty(person1,"name",{
    enumerable:false,
    configurable:false
});
console.log(person1.propertyIsEnumerable("name"))/*false*/

数据属性特征:

[[Value]]:创建对象时该特征自动赋值

[[Writable]]:布尔值,默认可以写

定义完整的数据属性:Object.defineProperty()

var person1 = {}
Object.defineProperty(person1,"name",{
    value:"Qian",
    enumerable:true,
    configurable:true,
    writable:true
})

访问器属性特征:

[[Get]]

[[Set]]

定义多重属性

Object.defieProperties()方法

var person1 = {}
Object.defineProperties(person1, {
    _name:{
        value: "Qian",
        enumerable: true,
        configurable: true,
        writable: true
    },
    name:{
        get:function () {
            console.log("Reading me")
        }
    }
})

获取属性特征:

Object.getOwnPropertyDescriptor()方法

var person1 = {
    name:"Qian"
}
var deseciptor = Object.getOwnPropertyDescriptor(person1,"name");
console.log(deseciptor.enumerable)/*true*/

7、禁止修改对象

[[Extensible]]:布尔值,设置为false,禁止新属性的添加

7.1、禁止扩展

方法:使用Object.preventExtensions()

检测方法:使用Object.isExtensible()

var person1 = {
    name:"Qian"
}
Object.preventExtensions(person1);
console.log(Object.isExtensible(person1))/*false*/

7.2、封印对象

方法:Object.seal()

检测方法:使用Object.isSealed()

var person1 = {
    name:"Qian"
};
Object.seal(person1);
console.log(Object.isSealed(person1))/*true*/

7.3、冻结对象

方法:Object.freeze()

检测方法:Object.isFrozen()

var person1 = {
    name:"Qian"
};
Object.freeze(person1);
console.log(Object.isFrozen(person1))/*true*/

总结:

1、将属性视为键值对,对象视为属性的哈希表有助于理解JavaScript对象。

2、你可以用点好或者中括号访问对象的属性

3、用in操作符检测某个属性是否存在

4、属性的两种类型:数据属性和访问器属性

5、属性的特征

6、锁定对象的3中方式

原文地址:https://www.cnblogs.com/QianBoy/p/8859036.html

时间: 2024-08-07 14:57:35

面向对象精要-理解对象的相关文章

03.JavaScript 面向对象精要--理解对象

JavaScript 面向对象精要--理解对象 尽管JavaScript里有大量内建引用类型,很可能你还是会频繁的创建自己的对象.JavaScript中的对象是动态的. 一.定义属性 当一个属性第1次被添加给对象时JavaScript在对上上调用了一个名为 [[Put]]的内部方法,该方法会在对象上创建一个新节点保存属性,就像 哈希表上第一次添加一个键一样这个操作不仅指定了初始值 也定义了属性的一些特征 1.1 [[Put]]内部方法 [[Put]]在对象上创建一个自有属性 1.2 [[Set]

面向对象的程序设计-理解对象

理解对象 创建自定义对象的最简单方式就是创建一个Object的实例,然后再为它添加属性和方法 1 var person = new Object(); 2 person.name = "Nicholas"; 3 person.age = 29; 4 person.job = "SoftWare Engineer"; 5 person.sayName = function(){ 6 alert(this.name); 7 }; 创建对象的首选模式是对象字面量方式 1

JS面向对象设计(1)-理解对象

不同于其他面向对象语言(OO,Object-Oriented),JS的ECMAScript没有类的概念, 它把对象定义为"无序属性(基本值.对象.函数)的集合",类似于散列表. 每个对象都是基于一个引用类型(原生类型.自定义类型)创建的. 1. 理解对象 创建自定义对象(Object构造函数.对象字面量). // Object构造函数:创建一个Object实例,再为实例添加属性和方法. var person = new Object(); person.name = "xia

javascript面向对象系列1——理解对象

[对象定义]无序属性的集合,其属性可以包含基本值.对象或者函数 //简单的对象实例 var person = new Object(); person.name = "Nicholas"; person.age = 29; person.job = "Software Engineer"; person.sayName = function(){ alert(this.name); } [内部属性类型]内部属性无法直接访问,ECMAScript5把它们放在两对方括号

第六章 面向对象的程序设计 (1 理解对象)

面向对象(Object-Oriented,OO)的语言有一个标志,那就是它们都有类的概念,而通过类可以创建任意多个具有相同属性和方法的对象. ECMA-262 把对象定义为:"无序属性的集合,其属性可以包含基本值.对象或者函数."严格来讲,这就相当于说对象是一组没有特定顺序的值.对象的每个属性或方法都有一个名字,而每个名字都映射到一个值.正因为这样,我们可以把ECMAScript 的对象想象成散列表:无非就是一组名值对,其中值可以是数据或函数. 每个对象都是基于一个引用类型创建的. 6

JavaScript 面向对象的程序设计(一)之理解对象属性

首先,JavaScript 面向对象的程序设计,主要分三部分. 理解对象属性: 理解并创建对象: 理解继承. 本文主要从第一方面来阐述: 理解对象属性 首先我们来理解Javascript对象是什么?在Javascript中,万物皆对象.其中创建自定义对象的最简单的方式就是创建一个Object的实例,如下: ECMAScript中有两种属性:数据属性和访问器属性. 数据属性:其中数据属性有四个描述其行为的特性:Configurable: 表示能都通过delete删除属性从而重新定义属性.Enume

第六章-面向对象的程序设计(理解对象)

ESMA把对象定义为:"无序属性的集合,其属性可以包含基本值,对象和函数".严格的讲,这相当于说对象是一组没有特定顺序的值,对象的每个属性或方法都有一个名字,而每一个名字都映射到一个值. 1.理解对象 创建对象有对象字面量的方法,这种方法比较常用,也是比较推荐的. 1 var person ={ 2 name:'xu', 3 age:27, 4 sayName:function(){ 5 alert(this.name); 6 } 7 }; 还有创建对象的实例的方法: 2.属性的类型

JS面向对象篇一、理解对象及属性特性(属性描述符)

本文内容 1.理解对象; 2.ECMAScript有两种属性类型:数据属性和访问器属性(getter和setter函数); 3.数据属性的属性特性:[[Configurable]].[[Enumerable]].[[Writable]].[[value]]; 4.访问器属性的属性特性:[[Configurable]].[[Enumerable]].[[get]].[[set]]; 5.Object.defineProperty().Object.defineProperties().Object

《Javascript面向对象精要》笔记

刚读过<Javascript面向对象精要>这本书,在现有的知识体系里面有一些新鲜的认识,记录一下. 原始类型和引用类型 Javascript存在两种类型:原始类型和引用类型.原始类型包括String.Number.Boolean.Null.Undefined,引用类型保存对象,其本质是对象所在内存位置的引用. 原始类型的赋值或者给函数传参,实际上都是传递原始类型值的拷贝: 引用类型则是引用的拷贝.修改其中一个引用的话,其他引用也会受到影响.如果对象中的某个属性也是对象,在对象拷贝时就会引入深拷