我现在处于一个新的领域,我有一段时间没有处理过这种事情。
为实例提供Javascript“类”的最佳方法是什么
// In the parent instance
function xyz()
{
var x = 1;
}
我想在类中设置它,当用户扩展一个类时,我希望它们有效地扩展这个功能。我知道我不清楚,但这是漫长的一天。例如,这是用户的代码。
// In the child instance
function xyz()
{
var y = 2;
}
合并应该导致:
// In the merged instance
function xyz()
{
var x = 1;
var y = 2;
}
我吸错了什么或者提出了错误的问题吗?
答案 0 :(得分:11)
你不能像在那里描述的那样“合并”函数,但是你可以做的是重新定义一个函数来调用它自己和一个新函数(在原始函数之前或之后)。
var xyz = function(){
console.log('xyz');
};
var abc = function(){
console.log('abc');
};
// and, elsewhere, if you want to merge:
var orig = abc;
abc = function(){
orig.call(this, arguments);
xyz.call(this, arguments);
};
如果您不关心执行上下文或者被调用函数是无参数的,则不需要包含(this,arguments)。但是为了清楚你想要一个参数化的方法,我可以做些什么。
答案 1 :(得分:8)
您使用jquery标记问题,因此我假设您使用jquery。使用jquery,您可以将对象与jQuery.extend()合并。
var object1 = {
apple: 0,
banana: {weight: 52, price: 100},
cherry: 97
};
var object2 = {
banana: {price: 200},
durian: 100
};
/* merge object2 into object1 */
$.extend(object1, object2);
或使用原型链来实现继承。例如:
function a() {
this.t1 = 1;
this.sayMyName = function() {
alert('a');
}
}
b.prototype = new a;
b.prototype.constructor = b;
function b() {
this.t2 = 2;
this.sayMyName = function() {
alert('b');
}
}
var obj = new b();
alert(obj.t1); // this would say 1
obj.sayMyName(); // this would say b
答案 2 :(得分:0)
如果我理解正确,您可以尝试重命名原始函数并在新函数中调用它:
// In the parent instance
function xyz()
{
var x = 1;
}
// In the child instance
var old_xyz = xyz;
function xyz()
{
var y = 2;
old_xyz();
}
也适用于类/方法继承:
MyClass.prototype.old_xyz = MyClass.prototype.xyz;
MyClass.prototype.xyz = function () {
this.old_xyz();
}
答案 3 :(得分:0)
const mergeFunctions = function () {
let listOfFuncs = []
for (let func of arguments) {
listOfFuncs.push(func)
}
return function () {
for (let func of listOfFuncs) {
func(arguments)
}
}
}
let x = function () {
console.log("hello");
}
let y = function () {
console.log("world")
}
mergeFunctions(x, y)()
/////////////////////
hello
world