我的目标是创建一个master_script.js。主要用于开发的处理程序文件。
该文件的一个小节专门用于自定义基础对象的原型:
- 细绳
- 数字
- 大批
- 目的
- 日期
- 功能
- 布尔值
所以当我写出我的代码块时......
/********************************************************/
Object.defineProperty(
Number.prototype,'len',
{get:function(){
str=this.toString()
return str.length
}}
)
/********************************************************/
n=123
o={123:'abc',abc:123}
/********************************************************/
console.log(
'n ⇒ ',n,
'\n n.len ⇒ ',n.len,
'\n n.__proto__ ⇒ ',n.__proto__
)
/********************************************************/
工作正常!
- 当我
n.__proto__在控制台中展开时,它会显示len: (...)属性及其 getter 函数get len: function (){。 - 当我
n.在控制台中输入时,它在属性列表中清晰可见|方法。
当我为o变量配置相同的设置时,问题就开始了:
/********************************************************/
Object.defineProperty(
Number.prototype,'len',
{get:function(){
str=this.toString()
return str.length
}}
)
/******************************/
Object.defineProperty(
Object.prototype,'len',
{get:function(){
cnt=0
for(i in this) cnt++;
return cnt
}}
)
/********************************************************/
n=123
o={123:'abc',abc:123}
/********************************************************/
console.log(
'n ⇒ ',n,
'\n n.len ⇒ ',n.len,
'\n n.__proto__ ⇒ ',n.__proto__
)
/******************************/
console.log(
'o ⇒ ',o,
'\n o.len ⇒ ',o.len,
'\n o.__proto__ ⇒ ',o.__proto__
)
/********************************************************/
我注意到的第一件事是,当我现在在控制台n.中输入或o.输入时,属性|方法的弹出列表不再包含对该属性的引用,但是如果我输入完整的扩展名或者我得到所需的结果or ...lenn.leno.len32
所以我知道代码是合法的,但我需要控制台弹出窗口,因为 7 个基础对象中的每一个都有大约 40 种不同的属性和方法......
所以我写了一个测试块来尝试和识别问题:
/********************************************************/
Object.defineProperty(
Object.prototype,'dis',
{get:function(){return this}}
)
/******************************/
Object.defineProperty(
Number.prototype,'len',
{get:function(){return this.length}}
)
/********************************************************/
o={123:'abc',abc:123}
n=123
e=document.createElement('option')
/********************************************************/
console.log(
'o ⇒ ',o,
'\n o.__proto__ ⇒ ',o.__proto__
)
/******************************/
console.log(
'n ⇒ ',n,
'\n n.__proto__ ⇒ ',n.__proto__
)
/******************************/
console.log(
'e ⇒ ',e,
'\n e.__proto__ ⇒ ',e.__proto__
)
/********************************************************/
立即在控制台中扩展.__proto__,和nowo后n,e我注意到所有 3 个都被赋予了dis我最初尝试分配给该o对象的属性。
然后我破解了它:Number.prototype它本身就是一个对象,所以它继承了它的dis属性Object.prototype
如何将dis属性仅附加到o对象而不被nfrom继承Object.prototype?