js 对象补充

js 对象

普通对象与对象简写

  • js 没有字典类型,只有对象类型,对象可以完全替代字典来使用
  • js 中对象的属性名,都采用字符串类型,所以就可以省略字符串的引号标识
  • 对象中属性值为函数时,称之为方法,方法建议简写: 方法名(){}
  • 如果对象的属性值是一个变量,且变量名与属性名相同,还可以简写:{属性,}
var dic_obj = {
 // 属性:值(数值,函数)
 'name': 'Santa',
 'eat': function () {
     console.log('在吃饭')
 }
};

console.log(dic_obj.name, dic_obj['name']);
dic_obj.eat(); dic_obj['eat']();
// 属性省略引号,方法简写
var height = 180
var p = {
 height,
 name: 'Santa',
 eat(){}
};
console.log(p.name, p.height);

第一种类(了解)

// 第一种声明类的方法
 class People {
     constructor (name) {
         this.name = name
     }
     eat () {
         console.log(this.name + '在吃饭')
     }
 }
 let p1 = new People('Bob');
 let p2 = new People('Tom');
 console.log(p1.name, p2.name);
 p1.eat();

第二种类(了解)

// 第二种声明类的方法(难点):在函数内部出现了this语法,该函数就是类,否则就是普通函数
function Teacher(name) {
 this.name = name;
 this.eat =function () {
     console.log(this.name + '在吃饭')
 }
}
let t1 = new Teacher('Owen');
t1.eat();

类属性

// 类属性:给类属性赋值,所有对象都能访问
function Fn() {}
let f1 = new Fn();
let f2 = new Fn();

// 赋值类属性
Fn.prototype.num = 100;

console.log(f1.num);
console.log(f2.num);

// 类似于单例
Vue.prototype.num = 1000;
let v1 = new Vue();
let v2 = new Vue();
console.log(v1.num);
console.log(v2.num);

js 函数补充

// 1)函数的形参与调用时传入的实参关系(你传你的,我收我的)
//      传入和接受的参数个数不需要一致
//      但是一定按位进行赋值(没有关键字参数)
//      没有接收的实参会被遗弃,没有被赋值的形参会被赋值为undefined
function fn1(a, b) {
 console.log(a, b);
 return a + b;
}

let res = fn1(10, 20, 30);
console.log(res);

// 2)函数定义的演变
let fn2 = function (a, b) {
 return a + b;
};

// 省略关键字的箭头函数
let fn3 = (a, b) => {
 return a + b;
};

// 没有函数体,只有返回值的函数,可以省略作用域{},由于只有返回值,所以return也省略
let fn4 = (a, b) => a + b;
console.log(fn4(11, 22));

// 如果形参只有一个时,声明参数的()也可以省略
let fn5 = num => num * num;
console.log(fn5(3));

// 弱语言
console.log(10 + '5');  // 105
console.log(10 - '5');  // 5
console.log(+'55555');  // 55555

总结:

1)对象就可以作为字典,属性名都是字符串,可以省略引号
2)属性值时变量同属性名,可以简写
3){}中的属性值为函数,称之为方法,也可以简写

4)定义的函数,函数名大写,且函数内部有this,代表类
5)可以通过 类.prototype.类属性 实现所以对象共享


原文地址:https://www.cnblogs.com/kai-/p/12304272.html