2

Sencha Touch v2.3,ExtJS v4.1.0。

创建新类时,为什么this要从constructor方法中返回?

示例(来自下面的链接):

var Person = new Ext.Class({
    name: 'Mr. Unknown',

    constructor: function(name) {
        this.name = name;

        return this; // <-- HERE. Why????
    },

    walk: function(steps) {
        alert(this.name + ' is walking ' + steps + ' steps');
    }
});

var jacky = new Person('Jacky');
jacky.walk(10); // alerts "Jacky is walking 10 steps" 

http://www.sencha.com/learn/sencha-class-system

4

2 回答 2

0

我不认为这是必要的,但它确实使代码更容易理解构造函数返回时会发生什么:您新创建的对象将返回给调用者。即使没有return this;.

于 2013-10-19T00:31:36.757 回答
0

返回this与使用new关键字生成对象不同。person 函数返回的this总是引用同一个对象。在大多数情况下,这将是全局对象,但与任何函数一样,取决于调用它的上下文。

例如,采取:

   function person(name) {
        this.name = name;

        return this; 
    }

假设您通过调用函数创建一个新人,该函数返回this

 var newPerson = person("Bob");

你再做一次。

var evenNewerPerson = person("Frank");

newPerson.name === "Frank" => true 
evenNewerPerson === newPerson => true

因此,您指向的是同一个对象。而使用new关键字将创建一个全新的对象。

var somePerson = new Person("Sue");
var otherPerson = new Person("Sally");

somePerson === otherPerson => false   
于 2015-10-02T14:50:38.157 回答