【管子先生的Node之旅·6】V8中的JavaScript(三)

2017-10-27  本文已影响0人  管子先生

FUNCTION

V8 中还提供了 .bind 用来改变this的引用:

    function a() {
        return this.hello == 'hello';
    }

    var b = a.bind({ hello: 'hello' });
    b(); //=>true

V8 中还支持到非标准的函数属性命名,并可以使用 .name 来获取命名:

    var a = function b() {}
    a.name; //=>b

该属性用于 V8 内部的堆栈追踪。当有错误抛出时,V8 会显示一个堆栈信息,并会告诉你是那个函数出错了。因此,为函数命名有助于调试,所以推荐。

__PROTO__(继承)

__proto__ 使得定义继承链更容易:

   function Animal() {}
    Animal.prototype.dsd = function(e) {
        return e;
   }

    function Dog() {}

    // 使用__proto__实现继承
    Dog.prototype.__proto__ = Animal.prototype;

    var dog = new Dog();
    dog.dsd(110); //=>110

存取器

可以通过 __defineSetter__ 来设置属性, __defineGetter__ 访问属性。
下面这个例子,为所有的 String 对象添加了 student 获取器,它会执行设定好的逻辑,简单的访问该属性就会调用事先设定好的函数,无需显性调用:

    String.prototype.__defineGetter__('student', function() {
        return '今天是' + this + '值日';
    })
    
    var a = new String('小明');
    a.student; //=>今天是小明值日
上一篇 下一篇

猜你喜欢

热点阅读