我通常使用这样的简单对象:
var Test = {
value: '', // A value
init: function(options) {
// Set value
Test.value = options.value;
}
};
问题是当我想在页面上多次使用该对象时。它会覆盖自己。 E.g:
Test.init({ "value" : "a" });
// Test.value is now "a"
Test.init({ "value" : "b" });
// Test.value is now "b"
这就是我在JavaScript中转向新构造函数的原因,因此我可以将构造函数的内容分开。我不熟悉JavaScript构造函数,不管这是否是正确的方法,我不确定。
我现在已将其设置为像这样运行:
var first = new Test();
first.init({ "value" : "a" });
// first.value is now "a"
var second = new Test();
second.init({ "value" : "b" });
// second.value is now "a"
我现在的问题是在构造函数中使用this.value
。
这是我的意思的一个例子。您会看到我在this.value
功能中设置init()
。但是,当您使用它的$.each()
函数创建JQuery循环时,JQuery会覆盖this
,因此我无法访问this.value
变量或this.format()
函数。
function Test() {
this.value = '';
}
Test.prototype = {
// Loader
init: function(options) {
// Set value
this.value = options.value;
// This outputs fine
console.log(this.value);
// I'll now create a loop using the JQuery "each" function
$('li').each(function() {
// This fails because "this" has now been overwritten by JQuery inside this function
this.format($(this).attr('data-id'), this.value);
});
},
// Format output
format: function(id, value) {
console.log(id + ' : ' + value);
}
};
var first = new Test();
first.init({ "value" : "a" });
var second = new Test();
second.init({ "value" : "b" });
以下是运行时发生错误的示例:
https://jsfiddle.net/8m46u73k/2/
所以有两个问题:
this
的情况下访问函数和变量?答案 0 :(得分:0)
您需要使用this
。
要在回调函数中使用this
,请使用bind()
强制始终使用正确的function() { this.whatever; }.bind(this);
调用函数:
int EditDistance(char s[1..m], char t[1..n])
// For all i and j, d[i,j] will hold the Levenshtein distance between
// the first i characters of s and the first j characters of t.
// Note that d has (m+1) x(n+1) values.
let d be a 2-d array of int with dimensions [0..m, 0..n]
for i in [0..m]
d[i, 0] ← i // the distance of any first string to an empty second string
for j in [0..n]
d[0, j] ← j // the distance of any second string to an empty first string
for j in [1..n]
for i in [1..m]
if s[i] = t[j] then
d[i, j] ← d[i-1, j-1] // no operation required
else
d[i, j] ← minimum of
(
d[i-1, j] + 1, // a deletion
d[i, j-1] + 1, // an insertion
d[i-1, j-1] + 1 // a substitution
)
return d[m,n]
答案 1 :(得分:-1)
function Test(value) {
this.value = value;
}
var test = new Test();
以上不是一个班级。它是一个对象文字,它更像是一个类的实例。
这是一个班级:
function Car(value) {
this.value = value;
}
Car.prototype.honkHorn = function () {
conosle.log("HONK: " + this.value);
};
var car = new Car("I am a car!");
car.honkHorn(); // writes "HONK: I am a car!" to the console.
这是一个包含原型方法的类,因此每次创建新实例时都不会重复这些方法。
{{1}}