1樓:Dobility
(假設你定義了 Object.prototype.foo = function(),假設你用的是 Vue Router)
這是 Vue Router + for-in 導致的。在 Vue Router 原始碼中有乙個 resolveQuery 函式:
export
function
resolveQuery
(query:?
string
,extraQuery
:Dictionary
>={}, _parseQuery:? Function): Dictionary >catch(e )}// 這裡有個 for-in,因為 extraQuery 是乙個物件,繼承了 Object,會遍歷到 Object.prototype for( const keyin extraQuery )return parsedQuery }而 for-in 是會遍歷到乙個物件自有的、繼承的、可列舉的、非Symbol的屬性,在函式中 extraQuery 是乙個物件,在原型鏈上它是繼承了 Object.prototype.foo 的方法,所以它在定義的時候是乙個可列舉的,所以也會被遍歷到,然後在計算路由的 href 時就會把你的方法的內容拼接到 url。 而且,這個函式只要在路由發生變化的時候,都會計算,所以你很難避開這個 for-in。 所以解決方法就是讓它變成不可列舉的,做法以及建議樓上已經提到了~ 2樓:錢朝坤 不要修改Object的prototype,會引發很多你根本意想不到的問題。 如果希望定義乙個方法,之後可以全域性引用,可以在main.js裡掛到vue的原型上,而不是Object的原型上 3樓: 兩個問題。 乙個是怎樣加屬性不會被遍歷到url裡面。 enumerable值為false就行 Object .defineProperty (Object .prototype ,'isPlainObject' ,return proto ===Object .getPrototypeOf (this);} })第二個問題我怎麼改乙個內建物件的方法。 function copyProto(o );const __proto=o .__proto__ ;proto .__proto__ =__proto;o .__proto__ =proto ;Object .defineProperty (proto ,'push' ,});} 4樓:賀師俊 盡量不要改任何 builtin 物件的 prototype,尤其是修改 Object.prototype 乃大忌。 最簡單一點,Object.prototype.foo = function () {} 之後,for (key in {}) ... 會遍歷到 foo。於是,如果用 for in 遍歷來序列化引數,就會出現拼接方法體。不過這貌似不像是 Vue 核心庫的坑。 xvrzhao mounted只是vue.js提供給你的介面,你在例項化 new Vue 的時候通過這個介面將你的業務邏輯傳給vue.js去處理,vue.js會在特定的階段去呼叫你的提供的mounted方法。你的說法就好比說你自己定義了乙個函式foo,瀏覽器也不認識這個foo,但是你呼叫foo 時,... 胖虎 其實怎麼說呢.其實一開始我也有過這樣的想法.如果Vue一開始設計的初衷是這樣的,一切的傳值,一切的元件通訊.都要依靠Vuex來實現,那麼你會覺得Vue傳值為什麼這麼複雜,或許會這樣問,為什麼Vue傳值這麼複雜,有沒有什麼簡單的方法可以去實現呢.狀態管理庫非常的多,Vue那麼官方的推薦就是Vue... 水秋玄 filter 是做一些統一的處理,比如轉大小寫,格式化時間 新增前字尾等等。用method也可以,但是使用按需混入太麻煩,自動全域性混入又沒必要,因為不是所有元件都用到。computed也可以用,但是computed實際是檢測所包含的的變數的改變,跟一般方法還是有區別,再者使用compute...vue開發的專案,前端寫的 vue檔案中的生命週期方法,線上還存在嗎?
vue框架中元件可以通過「this root 」的方式訪問根元件的data物件,為何vuex會熱?
vue中為什麼要使用filter?