I found the initial example of a problem with context and this to be incredibly contrived. If you have people who hate you dropping bind into your code and misusing a function only meant to be used with constructor calls, why wouldn't they do the same thing with your protocols?
By this author's logic, his own implementation is no good, because what if someone comes along and writes Protocol = "foo" in global scope? There's a difference between writing defensive code to prevent mistakes anyone could easily make, and trying to push your pet implementation forward through ridiculous hypotheticals.
Also, no mention of ES6 fat arrow functions and no mention of Immutable.js indicate that maybe this guy isn't interested in solving problems as much as he is in promoting his personal style.