【发布时间】:2015-05-08 09:36:47
【问题描述】:
$('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 所在的位置添加它..
但是我留下了一些我无法(理解如何)用新方法修改的东西。
【问题讨论】:
标签: javascript syntax prototype enumerable