前端笔记

面向对象

2018-05-10  本文已影响11人  好奇男孩

JS 中的对象

JS 中的对象是一系列无序 key: value 的集合

比如

var obj = { a: 1, b: 2}
var person = {
    name: 'hunger',
    sayName: function(){
        console.log('My name is hunger')
    }
}

我们可以通过 对象.属性来获取对应属性的值

console.log(person.name)
person.sayName()
但假设我们定义一个函数

function sum(a, b){
    return a + b
}

console.log(sum.name)   // => sum
console.log(sum.length)  //2

构造对象

我们可以抛开类,使用字面量来构造一个对象

var obj1 = {
    nick: 'Byron',
    age: 20,
    printName: function(){
        console.log(obj1.nick);
    }
}
var obj2 = {
    nick: 'Casper',
    age: 25,
    printName: function(){
        console.log(obj2.nick);
    }
}

问题:

  1. 太麻烦了,每次构建一个对象都是复制一遍代码

  2. 如果想个性化,只能通过手工赋值,使用者必需了解对象详细

使用函数做自动化

function createObj(nick, age){
  var obj = {
      nick: nick,
      age: age,
      printName: function(){
            console.log(this.nick);
        }
  };
  return obj;
}

var obj3 = createObj('Byron', 30);
obj3.printName();

通过创建一个函数来实现自动创建对象的过程,至于个性化通过参数实现,开发者不必关注细节,只需要传入指定参数即可

构造函数

function Modal(msg){
    this.msg = msg
}
var modal = new Modal()
undefined
modal
Modal {msg: undefined}msg: undefined__proto__: Objectconstructor: ƒ Modal(msg)__proto__: Object
modal.msg
undefined

过程:
1.创建了一个空对象{},并把这个空对象的proto指向Modal.prototype.

2.执行函数Modal(),执行过程中对 this 操作就是对 新创建对象 进行操作,未传入传输,可理解为传入值为undefined,然后这个对象的msg :undefined;

3.函数执行完后返回这个对象,然后把这个对象赋值给modal;

instanceof

instanceof是一个操作符,可以判断对象是否为某个类型的实例

 modal instanceof Modal( ; // true
 modal  instanceof Object;// true

instanceof判断的是对象

1 instanceof Number; // false

上一篇下一篇

猜你喜欢

热点阅读