13.GO、prototype
function Foo() {
getName = function () {
console.log(1);
}
return this;
}
Foo.getName = function () {
console.log(2)
}
Foo.prototype.getName = function () {
console.log(3);
}
var getName = function () {
console.log(4);
}
function getName() {
console.log(5)
}
Foo.getName(); //2
getName(); //4 GO 執行時賦值為function[4]輸出4
Foo().getName(); //1 Foo執行,getName沒有宣告,所以是全域性的,GO裡getName被重新賦值
getName(); //1 getName變為function[1]
new Foo.getName(); //2 Foo沒執行,.的優先順序高於new ,所以是new 2 依然是2
new Foo().getName(); // 3 (new Foo()).getName,尋找建構函式裡的getName,本身沒有,從原型找
new new Foo().getName() // 3 new 3複製程式碼
分析:GO={ Foo:function
getName: undefined->function【5】 ->function【4】->function【1】
}
/** * 判斷迴文 * */複製程式碼
function checkPlalindrome(str){
return str === str.split('').reverse().join('');
}
複製程式碼
/** * 陣列去重 * */
Array.prototype.unique = function () {
var temp = {},
newArr = [],
len = this.length;
for(var i = 0; i < len; i++){
if(!temp.hasOwnProperty(this[i])){
//!temp[this[i]] 用hasOwnProperty 是為了去掉陣列中重複的0
temp[this[i]] = this[i];
newArr.push(this[i])
}
}
return newArr
}
String.prototype.unique = function () {
var temp = {},
newStr = '';
for(var i=0;i<this.length;i++){
if(!temp.hasOwnProperty(this[i])){
temp[this[i]] = this[i];
newStr += this[i]
}
}
return newStr;
}
var str = '124eeerrrll'
str.unique()
function unique(arr){
let hasObj = {},
data = [];
for (let item of arr){
if(!hasObj[item]){
hasObj[item] = true;
data.push(item)
}
}
return data;
}
// console.log(unique([1,1,2,3,45,8,0,0,6,5,1]))複製程式碼
/** * 字串中第一個不重複的字元 */
function test(str) {
var temp = {};
for (var i = 0; i<str.length;i++){
if(temp.hasOwnProperty(str[i])){
temp[str[i]]++
}else {
temp[str[i]] = 1
}
}
for(var key in temp){
if(temp[key] === 1){
return key;
}
}
}複製程式碼
判斷資料具體型別(原始值、引用值、包裝類)
function type(target){
var ret = typeof(target);
var template = {
"[object Array]" : "array",
"[object Object]" : "object",
"[object Number]" : "number-object",
"[object Boolean]" : "boolean-object",
"[object String]" : "string-object"
}
if(target === null){
return "null";
}else if(ret == 'object'){
var str = Object.prototype.toString.call(target);
return template[str];
}else
return ret;
}複製程式碼