如何添加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;
}
};
}());
我似乎无法查看 $.fn
或 foo.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;
}
};
}());
$('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;
}
};
}());
我似乎无法查看 $.fn
或 foo.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;
}
};
}());