1樓:Keita
Array.prototype.slice可以被重寫,.
slice實際用的是Array.prototype.slice,但不能顯式修改.
slice,中ownpropertity只有length乙個屬性
Object
.getOwnPropertyNames
(Array
.prototype)[
"length"
,"constructor"
,"toString"
,"toLocaleString"
,"join"
,"pop"
,"push"
,"reverse"
,"shift"
,"unshift"
,"slice"
,"splice"
,"sort"
,"filter"
,"forEach"
,"some"
,"every"
,"map"
,"indexOf"
,"lastIndexOf"
,"reduce"
,"reduceRight"
,"copyWithin"
,"find"
,"findIndex"
,"fill"
,"includes"
,"entries"
,"keys"
,"concat"
]Object
.getOwnPropertyNames()["length"]
2樓:擼碼客
本質上沒區別。
是Array的乙個例項
即:console.log(.__proto__===Array.prototype);//true
又因為:console.log(.__proto__.slice===.slice);//true
所以console.log(.slice===Array.prototype.slice);//true
同理:console.log(["a","b","c"].slice===Array.prototype.slice);
console.log([5,6,7].slice===Array.prototype.slice);
當然,肯定是有區別的,區別就是Array.prototype.slice定義了slice方法,而.slice是使用slice方法。
即,你可以console.log([5,6,8,9,10,11].slice(2,5));//[8,9,10]
你不能console.log(Array.prototype.slice(2,5));因為這樣只是返回乙個空陣列而已。
當然可以Array.prototype.slice.call([1,2,3,4,5,6,7,8,9],2,5),只是速度慢些。
jquery也有slice方法,雖然功能原理上差不多吧,但他跟原生js的slice不是乙個東西。
在jquery中他是這樣的:
jQuery.fn.slice=function ()
3樓:Jasin Yip
Array
.prototype
.foo
='bar'
"bar"
>Array
.prototype
.bar
=function
()function
()>Array
.prototype
.bar()[
foo:
"bar"
,Symbol
(Symbol
.unscopables):
Object
]從 ECMAScript 的規範中我們可以知道:
Array.prototypemethods are generic methods that are not dependent upon theirthis
Array
.prototype
.slice
.call([1
,2,3
,4,5
],1,4
)[2,
3,4]
js中let與for迴圈輸入問題,為什麼輸出結果如下?
kkkKKKi 因為物件是引用基本型別,你可以把它理解成每次呼叫的時候都是使用的同乙個物件,因為這幾個物件共用乙個記憶體位址,所以最後無非就是同乙個物件用了兩次而已。陣列物件用的都是同乙個物件,當然資料就是一樣的了 善思即行 這裡不涉及作用域相關,主要是涉及到對引用型別變數改變問題。按題主的想法,出...
如何在js中呼叫php
Shaopeng 大概是下面這樣,js不能呼叫PHP方法,但可以通過http request方式觸發php方法並得到response server.php name POST name password POST password result loginUser name,password ech...
為什麼 js 中的 getter setter 不支援 async?
啦啦啦我賣報的小行家 很難理解為什麼要支援async,這明明是兩碼事。getter setter的設計本意就是抽象出值獲取和設定操作,至於值是什麼,什麼時候能給,那是你拿值任務的事 如果不區分的一股腦加上去,請問你是不是還要處理異常,處理各種狀態,那是不是就違反了單一原則,說實話,本身給setter...