2015-03-07 2 views
1

У меня есть функция в глобальном масштабе, который имеет вы можете вызвать эту функцию, как, чтоКак переопределить функцию, которая имеет статическую функцию

var b = blob(); 

но и с использованием в качестве пространства имен со статической функцией и имеет

var b = blob.parse(); 

Я хочу, чтобы переопределить блоб() функцию, не нарушая функцию blob.parse

+0

Прикрепите функцию '.parse()' к вашей новой функции (предварительно переопределить), а затем переопределите 'blob' с этой новой функцией. – alesc

+3

В первой строке кода есть загадочная опечатка (я думаю). Вы имеете в виду оба раза bl ** o ** b, а не bl ** a ** b один раз, не так ли? –

ответ

1

После того, как вы переписали старую функцию, необходимо скопировать все его свойства новая функция:

blob = (function (original) { 
    // new function body 
    function blob() { 
     blob.apply(this, arguments); // "super" call to old function? 
     // do whatever you want 
    } 
    // assuming it's a constructor: 
    blob.prototype = original.prototype; // reset prototype 
    blob.prototype.constructor = blob; // fix constructor property 
    // regardless: 
    for (var p in original) 
     blob[p] = original[p]; 
    return blob; 
})(blob); 
0
function blob() { 
    return { 
    "test": "Yes" 
    }; 
} 

blob.prototype.parse = function() { 
    return "parse function"; 
} 
var b = blob(), 
c = blob.prototype.parse(); 
console.log(b, c); 


var copyprototype = Object.create(blob.prototype); 

var blob = function() { 
    return { 
    "test" : "overridden" 
    } 
} 
blob.prototype = Object.create(copyprototype); 

var d = blob(), 
e = blob.prototype.parse(); 
console.log(d, e); 
0

Вот один из подходов, который пытается построить новый объект. Концепция связана с клонированием, поэтому будьте осторожны, если ваш оригинальный объект blob так или иначе глубок.

Приведен:

var b = function() { console.log("b"); } 
b.parse = function() { console.log("parse"); } 

Переоборудование являются:

var newB = function() { console.log("the new b"); } 
for (key in b) { 
    newB[key] = b[key]; 
} 

Результат:

newB(); 
>>>> the new b 
newB.parse(); 
>>>> parse 
Смежные вопросы