码疯窝

实现修改eval作用域达到$scope.$eval的效果

2015/10/09 16:18:58    分类: 技术随笔    1人评论 次浏览

已知javascript内置eval函数是没法指定其作用域的。但是想实现AngularJS $scope.$evel的效果。
为了区分原生eval函数跟AngularJS的$eval函数,所以命名区分为__eval。

Object.prototype.__eval = function (expr) {
    var key, keys = [], value, values = [], scope = this, 
        ownProp = Object.prototype.hasOwnProperty;
    for (key in scope) {
        if (!ownProp.call(scope, key)) continue;
        keys.push(key);
        values.push(scope[key]);
    }
    return Function.apply(null, Array.prototype.slice.call(keys).concat(['return ' + expr])).apply(null, values);
}
console.log({a: 1, b: 2}.__eval('a + b'));
console.log({a: 1, b: 2, test: function (a, b) {console.log('Do something'); return a * b;}}.__eval('test(a, b)'));
继续查看有关 技术随笔的文章

1个访客评论

  1. Koreyoshi.Y

    棒棒哒

    qweqwe Reply