我正在研究笛卡尔坐标库,我尝试简单地创建一个类,定义原型并创建实例。
但是在这个简单的例子中,我的笛卡尔对象上没有任何方法。
let Cartesian = function(instance, opts) {
let pos = opts.pos || {x:0, y: 0}
/* .. Logic here .. */
return {pos: pos}
}
console.log("Before : ", Cartesian.prototype.getPosition)
Cartesian.prototype.getPosition = function() {
return true
}
console.log("After : ", Cartesian.prototype.getPosition)
CartesianExport = {
create: function (instance, opts) {
console.log("Create new : ", Cartesian.prototype.getPosition)
let c = new Cartesian(instance, opts)
console.log("Created : ", c, c.getPosition)
return c
}
}
module.exports = CartesianExport
这是我的控制台
Before : undefined
After : function () { return true }
Create new : function () { return true }
Created : Object {pos: Object} undefined
我不明白为什么当我尝试使用它时我得到cartesian.getPosition is not a function
。
答案 0 :(得分:0)
使用此:
function Cartestian(opts) {
this.pos = opts.pos || {x: 0, y: 0};
}
当您在构造函数中说return {pos: pos};
时,将返回无原型对象{pos: pos}
而不是Cartesian
的新实例。使用返回的值重写实例。所以new Cartesian(...)
在没有原型的情况下评估对象。这就是我的意思:
function IncorrectlyDefined(obj) {
return obj;
}
var someObj = {x: 0, y: 0};
var x = new IncorrrectlyDefined(someObj);
// x === someObj
答案 1 :(得分:-3)
没有Cartesian.getPosition函数的声明,只有你的获取未定义。所以你可以声明函数c.getPosition函数你可以得到那个.data