用javascript链接的方法

时间:2010-11-05 13:12:20

标签: javascript node.js sproutcore

此工作代码使用的是Sproutcore:

person = SC.Object.create({
    firstName: 'Foo',
    lastName: 'Bar',
    fullName: function() {
        return this.get('firstName') + " " + this.get('lastName');
    }.property()

});

console.log(person.get('fullName')); // "Foo Bar"

我想知道在哪里声明了property()以及它们是如何使它工作的。 当我尝试在没有SC类的情况下重建它时,它给了我:

TypeError: Object function () {
        return this.get('firstName') + " " + this.get('lastName');
    } has no method 'property'

代码如何使其正常工作?

2 个答案:

答案 0 :(得分:3)

Sproutcore正在扩展函数原型。

Function.prototype.property = function() { /* code here */ };

sproutcore使用的特定代码位于https://github.com/sproutcore/sproutcore/blob/master/frameworks/runtime/core.js#L908

SC.mixin(Function.prototype, 
//...snip...

property: function() {
    this.dependentKeys = SC.$A(arguments) ;
    var guid = SC.guidFor(this) ;
    this.cacheKey = "__cache__" + guid ;
    this.lastSetValueKey = "__lastValue__" + guid ;
    this.isProperty = YES ;
    return this ;
  },
//snip
);

在他们的情况下,他们使用自己的mixin方法,但概念是相同的:扩展原型

答案 1 :(得分:1)

据推测,Sproutcode已修改Function.prototype以包含property函数。

您可以查看the source code