美文网首页
(8) 对象

(8) 对象

作者: 汨逸 | 来源:发表于2019-04-29 00:50 被阅读0次

对象

1. 概念

ECMA-262把对象定义为:“无序属性的集合,其属性可以包含基本值、对象或者函数。”

对象 = 属性 + 方法

2. 创建对象的N中方式

  1. 构造函数模式

    var obj = new Object();
    obj.name = 'Modeest';
    obj.say = function () {
        console.log('hello world');
    }
    
    console.log(obj.name);
    obj.say();
    
  2. 对象字面量模式

    var obj = {
        name: 'Modeest',
        say: function () {
            console.log('hello world');
        }
    }
    
    console.log(obj.name);
    obj.say();
    

ES6对字面量进行了简化

  1. 属性名跟变量名相同,可以简写
  2. 方法名省略function关键字
var name = 'Modeest';

var obj = {
    name,
    say () {
        console.log('hello world');
    }
}
console.log(obj.name);
obj.say();
  1. 构造函数模式

    function Person () {
        this.name = 'Modeest';
        this.say = function () {
            console.log('hello world');
        }
    }
    
    var obj = new Person();
    console.log(obj.name);
    obj.say();
    
  2. Class模式(ES6)

    class Person {
        constructor (name) {
            this.name = name;
        }
        say () {
            console.log('hello world');
        }
    }
    var obj = new Person('Modeest');
    console.log(obj.name);
    obj.say();
    

3. 注意

  1. 调用属性

    obj.name
    
    // 等价于上面的obj.name
    var key = 'name';
    obj[key]
    
  2. 调用方法

    obj.say()
    
    // 等价于上面的obj.say()
    var key = 'say';
    obj[key]()
    

4. 优点

  1. 给函数传递大量可选参数,使用对象很方便

5. Object方法

  1. defineProperty:定义单个属性

    var person = {};
    Object.defineProperty(person, "name", {
        writable: true,  // 是否可修改
        configurable: false, // 是否可以删除属性
        enumerable: true,    // 是否可以枚举属性
        value: 'Modeest',    // 设定name的值
        get: function () {   // 获取name调用的钩子
            return this.name;
        },
        set: function (newValue) {   // 修改name调用的钩子
            if (newValue === 'Modeest') {
             this.name = 'modeest-1';
            }
        }
    })
    
    注意:
    1. 默认情况下,上述的writable,configurable,enumerable都为false
    2. 上述属性如果设置为false,在非严格模式下忽略,在严格模式下报错
    3. 定义属性的configurable为false,再调用defineProperty修改configurable时也会直接报错
    
  1. Object.defineProperties():定义多个属性

    var person = {};
    Object.defineProperties(person, {
        name: {
            value: 'modeest'
        },
        age: {
            value: 18
        }
    })
    
  2. Object.getOwnPropeertyDescriptor():读取属性的特性

    Object.getOwnPropeertyDescriptor(person, 'name');
    

6. 关于构造函数

function Person (name, age) {
    this.name = name;
    this.age = age;

    this.say = function () {
        alert(this.name);
    }
}

var p = new Person('Modeest', 18);

instanceof:判断对象是否是类的实例化对象

p instanceof Person;

此处有个面试题:判断某个值是否是对象的方法,多种实现方法

(设计模式,原型,继承)未完待续。。。

相关文章

  • (8) 对象

    对象 1. 概念 ECMA-262把对象定义为:“无序属性的集合,其属性可以包含基本值、对象或者函数。” 对象 =...

  • 8.对象

    8.1对象的类型与编码 Redis中的每个对象都由一个redisObject结构表示,该结构中和保存数据有关的三个...

  • 8、面向对象

    分析面向对象 先分析类,分析静态的属性和动态的方法 创建对象:类名 对象名=new 类名(); 为对象的属性赋值:...

  • JavaScript (8)-对象

    面向对象简介 对象的作用是:封装信息。比如Student类里可以封装学生的姓名、年龄、成绩等。 对象具有特征(属性...

  • 4:k8s基础概念

    一、k8s对象k8s对象:是一种持久化的,用于表示集群状态的实体。1,对象的定义本身是声明式的,它定义了对象被k8...

  • 认识JS V8引擎机制

    何为V8: V8 GC 回收策略: V8 常用的GC算法: 新生代对象的垃圾回收 新生代对象回收细节: 老生代对象...

  • K8s也面向对象?学会这三要素,用K8s就跟编程一样

    今天我们来聊一聊关于K8s对象的那些事。 是的,K8s 也面向对象 K8s 这个体系也是面向对象的,听起来有没有那...

  • 8.面向对象

    类的定义 尝试 写出 有意义的面向对象的代码。从如何构建一个类开始:核心:类、对象。变量名采用小写,单词采用下划线...

  • №8:类与对象

    1.1用类来制造对象 类与对象 对象是实体,需要被创建,可以为我们做事情 类是规范,根据类的定义来创建对象 对象(...

  • Chapter 8 对象集合

    8.1 顺序容器 容器是现代程序设计非常基础而重要的手段。 所谓容器,就是“放东西的东西”。数组可以看作是一种容器...

网友评论

      本文标题:(8) 对象

      本文链接:https://www.haomeiwen.com/subject/ehxenqtx.html