js访问器属性之小标题

看js访问器属性时候 有那样一段代码

GTK+是一套跨平台的,以C语言编写的GUI类库,它起点于GNU的图像处理程序”GIMP”,由此被起名为”The
GIMP Toolkit”,从一初叶它就被规划为支撑三种语言,而不仅仅是C。

    var book = {
        _year: 2004,
        edition: 1
    }
    Object.defineProperty(book, 'year', {
        get: function () {
            return this._year;
        },
        set: function (val) {
            if (val > 2004) {

                this._year = val;
                this.edition += val - 2004;
            }
        }
    });
    book.year = 2005;
    console.log(book.edition);
    console.log(book.year);
    console.log(book._year);

固然以C语言做为开发语言,它却具有面向对象的天性,它利用了类与回调函数的思考。

书中说’ _year  ‘表示是一种常用标记。表示只好通过对象访问的本性。

Gtk+有诸多语言的绑定,如 C++, Guile,
Perl, Python, TOM, Ada95, Objective C, Free 帕斯Carl, Eiffel, Java and
C#。对于C++的绑定,它的名字叫做Gtkmm。它是对Gtk+的更面向对象的卷入。它周全地采用了C++的表征。比较别的类库,如MFC,QT等,它们是在C++语言尚未完全成熟的时候开发出来的,代码中隐含着比较多的宏定义,或然对C++进行本身的扩大。在这一边,Gtkmm有着杰出的优势,它让程序员能更领会地知道框架的运维机制。它更反映出了C++语言的强大与优雅。如它利用libsigc++举行信号的传递,直接动用STL库进行数据的操作。

由此作者以为它只是一种标志,能够更改  于是乎自作者就把’_year’ 改成了 ‘year’

 

   var book = {
        year: 2004,
        edition: 1
    }
    Object.defineProperty(book, 'year', {
        get: function () {
            return this.year;
        },
        set: function (val) {
            if (val > 2004) {

                this.year = val;
                this.edition += val - 2004;
            }
        }
    });
    book.year = 2005;
    console.log(book.edition);
    console.log(book.year);
    console.log(book.year2);

下面是Gtkmm封装的widget层次结构图。

可是却爆了如此三个荒谬    

图片 1

Uncaught RangeError: 马克西姆um call stack size exceeded      翻译过来正是堆栈溢出了。。。

这一个标题先搁置,我们再试一下’_year’ 改成了 ‘year2’

 var book = {
        year2: 2004,
        edition: 1
    }
    Object.defineProperty(book, 'year', {
        get: function () {
            return this.year2;
        },
        set: function (val) {
            if (val > 2004) {

                this.year2 = val;
                this.edition += val - 2004;
            }
        }
    });
    book.year = 2005;
    console.log(book.edition);
    console.log(book.year);
    console.log(book.year2);

这一次又好了。所以本人以为书中’year‘某个迷惑人

再来三个终极版本

    var book = {
        year: 2004,
        edition: 1
    }
    Object.defineProperty(book, 'updateAll', {
        get: function () {
            return book;//此处可以自定义 别人访问时候返回什么,如果什么都不写 就代表这个属性不让访问
        },
        set: function (val) {
            if (val > 2004) {
                this.year = val;
                this.edition += val - 2004;
            }
        }
    });
    book.updateAll = 2005;
    console.log(book.edition);
    console.log(book.year);
    console.log(book.updateAll);

小结:原来访问器属性,(不是指标属性) 名字随意起名。它的意义便是 决定
 你拜访依旧安装 这么些性子的时候
 是不容,仍旧做过多事情,比如更新本对象的万事天性,等等。。

 至于刚先生才内存溢出,正是因为我们 访问器属性的名字
和目的属性的名字一样了,  所以在 这一句  <pre>this.year =
val;</pre> 的时候 大家本意是打算调用对象属性,但实际上它又调用了
访问器属性,形成了递归。so~~~

 

 

设置进度必需求留意的一个难题正是逐一项目标依赖关系,上面是一张正视图。来自http://www.gtkmm.org/jhbuild_dot_gtkmm.png

图片 2

 http://blog.h5min.cn/KAYASCUT/article/details/368525

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图