2016-05-23 37 views
-1

您好在下面的例子我使用导入MeasurementObject:import MeasurementObject from './app/..etc'此关键字为对象常量

当我打电话MeasurementObject.getScrollToValue()的一个实例

thisMeasurementObject.getScrollToValue()是指所述执行上下文中的方法内。因此this.getURL()未定义。我怎样才能得到它来引用MeasurementObject的当前上下文,因此请致电this.getURL()

const MeasurementObject = { 

    getType(){ 
     return "a" 
    } 

    getURL(){ 
     return "b"; 
    } 

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

export default MeasurementObject; 
+1

你问的JavaScript对象文字和函数或类之间的区别? –

+3

您已将您的问题编辑为完全不同的问题。感谢您浪费大家的时间。 – naomik

+1

你似乎完全改变了你的问题。当你用'MeasurementObject.getScrollToValue()'调用函数时,'this'内部的this将引用'MeasurementObject',所以你的工作正常。不知道你的意思是什么*“方法内的'this'指的是执行上下文”*“。 –

回答

1

当您导出一个类实例化没有它,你定义在原型上设置属性的问题。而你没有上下文,你需要实例化,然后你就可以使用“this”。

现在至于你的例子,你的函数内的“this”正确地引用了对象,但是你没有返回它。

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的一个实例,并继承其所有的原型。

希望有所帮助。

+0

您似乎将'class'与'const'混淆。不,对象文字不会用原型对象创建类。 – Bergi

+0

Bergi对象litteral - 你来这里迟到他最初的问题是有关类,但感谢您的理由自由downvote。 –

+0

啊,我没有看到这个问题的可怕变化。尽管如此,你的答案有错,谢谢编辑:-) – Bergi

2

事实上,你出口他们没有区别。

MeasurementClass是一个构造函数MeasurementClass.prototype定义3种方法。 getTypegetURLgetScrollToValue

对于您使用该类,您将不得不使用new关键字实例化该类。 (new MeasurementClass()).methodName(...)

MeasurementObject对象常量与直接在物体上定义的3种方法。 getTypegetURLgetScrollToValue

使用对象只是一个调用obj.methodName()

+0

的一个副本:你不需要那些额外的包装零件使用构造函数的结果,'新的MeasurementClass()。methodName()'工作原理是一样的。 – dandavis