1樓:Saviio
我一點都不覺得這有什麼不好理解或者困惑的。
設命名空間如下:
varnamespace={}
乙個是例項屬性
namespace
.foo
=function
(arg1
,arg2
)var
ins=
newnamespace
.foo(10
,20)乙個是靜態方法
namespace
.foo
.isEven
=function(x
)namespace
.foo
.isEven
(ins
.field1
)// => true
不清晰麼?非要顯式宣告乙個Init函式以工廠的形式提供呼叫才是清晰麼,不覺得呀?
如果你用ES6:
class
Foostatic
isEven(x
)}varins
=new
Foo(10,
20)Foo.
isEven
(ins
.field1
)而另一門典型的動態語言 - Python的構造形式如下(與ES6更像):
class
Foo():
def__init__
(self
,arg1
,arg2
):self
.field1
=arg1
self
.field2
=arg2
@staticmethod
defisEven(x
):returnx%
2==0ins
=Foo(10
,20)Foo
.isEven
(ins
.field1
)而通常情況下,我們程式設計難道不是應該用一種更具有普適性的方式編寫嗎?
至於另外一門在設計上和JS更接近的動態語言 - Lua的話,OO的模擬大概可以是這樣的,你自己比較吧。
Foo=
{}function
Foo.
new(
arg1
,arg2
)local
self
=setmetatable
({},
Foo)
self.field1
=arg1
self.field2
=arg2
return
self
endfunction
Foo.
isEven(x
)returnx%
2==0end
ins=
Foo.new(10
,20)Foo.isEven
(ins.field1)
2樓:咕嚕捨小二
並不一樣的,前者是用function定義類,你的方法是簡單定義了乙個物件。如果沒有猜錯的話,他這麼做是準備做工廠模式使之進行多個地方的引用。 邏輯完全不同。
關於javascript中defineProperty的問題?
牧歌 為了避免衝突,讓上下文更安全。 itlr Object.defineProperty 更強大 This method allows precise addition to or modification of a property on an object.Normal property ad...
javascript 關於 propertyIsEnumerable 的問題?
你應該用 arr.propertyIsEnumerable length arr.propertyIsEnumerable length arr.propertyIsEnumerable window.length arr.propertyIsEnumerable 0 假設你所在的視窗沒有 fram...
javascript中object keys方法使用的問題(實操和書上寫的不相符)?
混混蛋 Object.keys obj 返回obj的自身 不包含原型鏈上的 的所以可列舉屬性的名字陣列 for in迴圈則包含原型鏈.for name in obj Object.getOwnPropertyNames obj 返回obj自身 不含原型鏈上的 的所有屬性名陣列,包括不可列舉的 想要獲...