zoukankan      html  css  js  c++  java
  • 面向对象的程序设计之对象

    /**
         *  创建一个Object的实例 然后添加属性和方法 
         **/
        var person = new Object();
        person.name = "LXK";
        person.age = "12";
        person.sayAge = function() {
            return this.age;
        };
    
        /**
         *  面向字面量的方法  等价于上面的代码
         **/
         var person = {
             name: "LXK",
             age : "12",
    
             sayAge : funtion() {
                 return this.age;
             }
         };

    ECMAScript 中有两种属性: 数据属性 和访问器属性
    数据属性 和访问器属性 不能直接定义 只能通过Object.defineProperty()方法来定义


    数据属性包含一个数据值的位置 这个位置可以读取和写入值 数据属性有4钟特性

    [[configurable]]: 默认值为true 

    [[Enumerable]]: 表示能否通过for-in循环返回属性  默认值为true 

    [[Writable]]:表示能否修改属性的值  默认值为true  默认值为false的时候 表示只读 不可修改

    [[Value]]:包含这个属性的数据值 从这个位置读取 和写入保存  默认值为 undefined

    var p1 = {
     name :"LXK"
    };

    这个对象的[[Value]]被设置为LXK 这个值得任何修改都将反应在这个位置

    修改默认属性必须使用Object.defineProperty(p1, "age", {})方法。三个参数 属性所在的对象 属性名  一个描述符对象 描述符对象的属性必须是:configurable enumerable writable value 

    var p1 = {};
    Object.defineProperty(p1, "name", {
     writable:false,
     value:"LXK"
    })
    console.log(p1.name) // "LXK"  ;
    p1.name = "lxk";
    console.log(p1.name) //"LXK"
    
    //writable:false  表示写入的值只可以读取 不可以修改

    以上规则也是用于不可配置属性 (configurable)

    var p1 = {};
    Object.defineProperty(p1, "name", {
     configurable: false,
     value: "LXK";
    });
    p1.name // "LXK";
    delete p1.name // false;
    p1.name // "LXK";

    不可配置属性(configurable)一但被设置为false 就不可以在给变成可配置了 在调用Object.defineProperty()方法修改writable之外的属性都会导致错误

    笔记:IE8以上可以使用Object.defineProperty()方法

    访问器属性:访问器属性不包含数据值;他们包含一对getter setter 函数(这两个函数不必须) 在读取访问器属性时,会调用getter函数,这个函数负责返回有效的值;在写入访问器属性的时候,会调用setter属性并传入新值,这个函数决定如何处理数据。  访问器属性有四个特性。

    [[configurable]]

    [[Enumerable]]

    [[Get]]:在读取属性时调用的函数  默认值undefined  p1.name //"LXK"  读取

    [[Set]] :在写入属性时调用的函数 默认值undefined   p1.name = "LXK"  写入

    var book = {
     _year : 2004,
     edition:1
    };
    Object.defineProperty(book, "year", {
     get: function(){
       return this._year;
     },
     set: function(newYear){
        if(newYear > 2004){
          this._year = newYear;
          this.edition += newYear - 2004;
        }     
     },
    });
    book.year = 2005;
    console.log(book.edition);
    var book = {};
    Object.defineProperties(book,{
      _year: {
        writable: true,
        value: 2004
      },
      
      edition: {
        writable: true,
        value: 1
      },
    
      year : {
        get: function(){
          return this._year;
        },
    
        set: function(newYear){
    if( newYear > 2004){ this._year = newYear; this.edtion += newYear - 2004; } } } });

    Object.defineProperty()

  • 相关阅读:
    java8大排序
    如何删除oracle 的用户及其数据
    JavaScript开发者常忽略或误用的七个基础知识点
    Vim学习指南
    5个开发人员不应该错过的最好跨平台PHP编辑器
    OpenGL 简介
    web 页面内容优化管理与性能技巧
    创建高性能移动 web 站点
    近期十大优秀jQuery插件推荐
    30本世界名著浓缩成的经典话语
  • 原文地址:https://www.cnblogs.com/liuxiankun/p/6546002.html
Copyright © 2011-2022 走看看