Executando verificação de segurança...
2

Não são realmente conceitos equivalente, para além da descrição superficial de "estenderem um objeto".
Extensions em C# é uma feature de linguagem que funciona no nivel real de tipos, o compilador detecta que você fez algo como something.ExtensionMethod() e transforma isso no equivalente funcional StaticClass.ExtensionMethod(something).
Em JS não existem tipos no sentido concreto da palavra, a linguagem tem o conceito de prototypes pra permitir o compartilhamento de comportamentos entre objetos com raízes em comum, mas não passa disso. Você pode inclusive fazer coisas assim:

const prot = { click() { console.log('clicked') } };
const something = {};
something.click(); // erro
something.__PROTO__ = prot;
something.click(); // 'clicked'

Então está muito mais próximo de uma ideia de "herança" em OOP do que do que seriam os extension methods. Em C# você pode usar o type system ao máximo do potencial dele com as extensions, inclusive pra fazer coisas completamente genéricas como:

public static void PrintTypeName<T>(this T self)
    => Console.WriteLine($"Type name is {typeof(T).Name}");
"something".PrintTypeName();
Carregando publicação patrocinada...
1

Sim, sim!

você fez algo como something.ExtensionMethod() e transforma isso no equivalente funcional StaticClass.ExtensionMethod(something).

Não só o compilador pode fazer isso, como você pode explicitamente fazer essa chamada, isso é um sulgar sintaxe da linguagem.

Ai foi por isso que disse similaridade, a utilização é similar, o que muda é como a linguagem lida com isso.

Obrigado, por agregar ao post!