如何添加Object.prototype.x?设为 enumerable:false

How to add Object.prototype.x? set to enumerable:false

$('example')

控制台日志foo {word: "example", letter: function}

                                  ^

日志显示 letter 是 foo

的原型函数
var foo,$;

(function() {

    foo = $ = function(word) {
        return new foo(word);
    };

    var foo = function(word) {
        //#A
        this.word=word;
        console.log(this.word);
        return this;
    };


    foo.fn = foo.prototype = {

        letter: function(n) {
            console.log(this.word[n]);
            return this;
        }
    };

}());

我似乎无法查看 $.fnfoo.fn

console.log($.fn);     //fn is undefined
console.log(foo.fn);   //foo is undefined

console.log($.prototype); //shows me constructor and __proto__

为什么?如果我想在代码后面添加更多原型函数怎么办?为什么它对 Array.prototype.something=function... 有效,但对这段代码却无效?

我想知道如何做到这一点,正如我上面所说的,我可以看到 letter 函数,但是如果不是将字母的声明放在原型中,我将 //A 替换为

Object.defineProperty(this,"letter",{
    value:
        function(n) {
            console.log(this.word[n]);
            return this;
        }
    ,enumerable:false});

letter 隐藏在 foo 对象内部,并使原型为空。我似乎无法访问原型对象,我不想在控制台日志中看到额外的 function junk 如果我确实向它添加了一些东西,我会把它看作垃圾,除非我把它添加到 //A 所在的位置..

但是我留下了一些我不能(理解如何)用新方法修改的东西。

你的问题的标题似乎与问题无关,但我们开始吧:

foo = $ = function(word) {
    return new foo(word);
};

var foo = function(word) {
    ...
};

等同于

var foo;
foo = $ = function(word) {
    return new foo(word);
};

foo = function(word) {
    ...
};

即您正在创建一个局部变量 foo 来隐藏外部变量。因此,您永远不会分配给全局 foo 并且永远不会在函数之外公开 foo.fn

将函数分配给 $,但您从未将 fn 分配给该函数。


如果我理解正确你想做什么,那么你必须重命名变量,这样它就不会隐藏外部变量,并在正确的函数上公开 fn(如果您重命名了变量):

var foo,$;

(function() {

    foo = $ = function(word) {
        return new InnerFoo(word);
    };

    var InnerFoo = function(word) {
        //#A
        this.word=word;
        console.log(this.word);
        return this;
    };


    foo.fn = InnerFoo.prototype = {

        letter: function(n) {
            console.log(this.word[n]);
            return this;
        }
    };

}());