JS 当中几种对象的创建【笔记】

/*
1.使用字面量创建对象【常用】
*/
var a = {}; // js中的空对象、

var student = {
// 使用 : 来分隔key 和 value
name : 'mujiaoniao',  // 键值对之间使用 , 分割. 最后一个属性后面的 , 可有可无
age: 50
};

function someMathod(){
console.log(" go to bed ")
}

var person = {
name : "mujiaoniaoniao",
 age: 8
doing: someMathod, //   调用方法   把已经定义的函数作为 doing key 的 value
  say: function (target){  // 将匿名函数作为 say key 的 value
  console.log('hello '+ target);
    }
}
// JS 中的对象  像map一样开放的,可以随时随地的动态添加  key value
student.teacher = 'wanglaowu';
student['master'] = 'zhaosi';
// 以上两种的方法都可以   在student 方法中添加属性;

student['say'] = person.say;
student.say('hello world')
//此时将 person中 say方法 赋予给   student 对象中 并且起名为 ‘say'

//1.使用  。 成员访问运算符来访问    属性  。 可以理解为  “的”
console.log(student.name);
//2 使用 [] 来访问属性  此时的属性需要加上引号
console.log(student['name']);
// 3.调用方法 不能忘记加上 ()
student.say();

function createStudent(name,age){
       var s = {
       name: name ;
       age : age ;
       };

       s.sayHello = function(target){
       console.log("你好,"+ target);
       }
       return s;
}


var o1 = createStudent ('张三',12);
var o2 = createStudent('李四', 15);
// 向 createStudent 函数中  传参;

//使用new Object 创建对象

var student = new Object();

student.name = 'mujiaoniao';
student.height = 144 ;
student.weight = 123 ;

student.say = function (){
 console.log('hello');
}
// 这样创建的对象可以随时随地的   添加属性 和方法
console.log(student.name);
console.log(student['weight']);
student.say();


// 3.使用 构造函数 创建对象
// 以上两种方式进行创建对象的方式 只能创建一个对象 而构造函数可以创建多个对象;

// 基本语法
/*

function 构造函数名(形参){

   this.属性 = 值 ;
   this.方法 = function ;
}

var object = new 构造函数名(实参);

  tips:
  1.构造函数的函数名首字母大写
  2.创建对象传递向形参传递实参时   必须使用new关键字
  其中 this 相当于  ”我“

*/

function Cat (name,type,sound) {
this.name = name ;
this.type = type ;
this.miao = function(){
  console.log(sound);
  }
  // 不需要return : 整个函数是构造函数  所以没有返回值
}

var mi = new Cat('mimi','田园毛','miaomiao');
var heihei = new Cat('heihei','波斯猫','bobo');
console.log(mi);
mi.miao();

// js当中没有类的概念  可以将Student 这个函数暂时当成 类 + 构造方法来使用;
// 与Java不同 没有访问权限的设置  可以认为全是 public
//在 ES6 中也引入了 class 关键字, 就能按照类似于 Java 的方式创建类和对象了


class Cat {

// constructor : 构造方法,无论 class 叫什么名字
   constructor (name , type ) {
     this.name = name ;
     this.type = type ;
    }
    // 这里可以不写 function
     function miao(target){
       console.log(sound);

    }

}
var cat1 = new Cat('mimi','波斯猫','mioamiao');
console.log(cat1);
cat1.miao();

function f(o) {
    // 根本不管 o 是什么类型,只要求,o 这个对象有 key 是 say 的 value
    // 并且 value 的值是 function 就可以
    o.say();

    // 习惯上,称这种方式叫做鸭子类型(duck type)
}

//f({
//    say: function () { console.log('我是临时构造的对象')}
//});

function Student() {
    this.say = function() { console.log('我是学生'); }
}
var o = new Student();
f(o);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值