您好在下面的示例中,我使用:import MeasurementObject from './app/..etc'
当我调用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;
答案 0 :(得分:2)
您导出它们的事实没有区别。
MeasurementClass
是一个构造函数,在MeasurementClass.prototype
上定义了3个方法。 getType
,getURL
和getScrollToValue
要使用该类,您必须使用new
关键字实例化该类。 (new MeasurementClass()).methodName(...)
<强> VS 强>
MeasurementObject
是对象文字,直接在对象上定义了3个方法。 getType
,getURL
和getScrollToValue
使用该对象只需要调用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的一个实例,并将继承其所有原型。
希望有所帮助。