这个关键字用于对象文字

时间:2016-05-23 01:09:57

标签: javascript reactjs react-native

您好在下面的示例中,我使用:import MeasurementObject from './app/..etc'

导入MeasurementObject

当我调用MeasurementObject.getScrollToValue()

的实例时

方法this内的MeasurementObject.getScrollToValue()指的是执行上下文。结果this.getURL()未定义。我怎样才能引用它来引用MeasurementObject的当前上下文,从而调用this.getURL()

const  MeasurementObject  = {

    getType(){
        return "a"
    }

    getURL(){
        return "b";
    }

    getScrollToValue(){
        return this.getURL();
    }
}

export default MeasurementObject;

2 个答案:

答案 0 :(得分:2)

您导出它们的事实没有区别。

MeasurementClass是一个构造函数,在MeasurementClass.prototype上定义了3个方法。 getTypegetURLgetScrollToValue

要使用该类,您必须使用new关键字实例化该类。 (new MeasurementClass()).methodName(...)

<强> VS

MeasurementObject对象文字,直接在对象上定义了3个方法。 getTypegetURLgetScrollToValue

使用该对象只需要调用obj.methodName()

答案 1 :(得分:1)

导出类而不实例化它时,您定义的所有属性都在原型上设置。并且你没有上下文,你需要实例化,然后你可以使用&#34;这&#34;。

至于你的例子,&#34;这个&#34;在函数内部正确引用对象,但是你没有返回它。

const MeasurementObject = {

    getType(){
        return "a"
    },

    getURL(){
        return "b";
    },

    getScrollToValue(){
        return this.getURL();
    }
}


var a = MeasurementObject.getScrollToValue()
console.log(a)

当您定义一个对象时,您已经在处理一个实例,并且在对象上设置属性而不是它的原型。

<强>更新

执行此操作时:

class MeasurementClass {

    getType(){
        return "a"
    },

    getURL(){
        return "b";
    },

    getScrollToValue(){
        return this.getURL();
    }
}

你得到的是:

function MeasurementClass(){}
MeasurementClass.prototype.getType = function(){ return "a" }
MeasurementClass.prototype.getURL = function(){ return "b"; }
MeasurementClass.prototype.getScrollToValue = function(){ return     this.getURL(); }

然后当您尝试访问它而不实例化MeasurementClass.getScrollToValue

您正在尝试访问不存在的内容。

但是,当您实例化该函数时,所有这些原型属性都会继承到实例,所以:

const measurementClass = new MeasurementClass();

measurementClass将是MeasurementClass的一个实例,并将继承其所有原型。

希望有所帮助。

相关问题