美文网首页
JS_面向对象_01

JS_面向对象_01

作者: Bboy_2016 | 来源:发表于2018-01-11 00:23 被阅读4次

开篇

function Dog() { // Dog 对象}`
var bigHuang = new Dog()    // bigHuang dog的实例`

由来

面向对象是计算机语言的一种标志,他们有类的概念,而通过类,我们可以创建无数个对象去使用该类的方法和属性,这是极好的。但是在

ECMAScript是没有类的概念的,这就产生了一些问题,但是无数的能人志士相出了办法,用函数去模拟类,于是我们诞生了构造函数。。

需要具备的JS能力

js基础知识,知道对象,等基本引用类型。

属性操作符

 下次在说把 

正题

方式一 - 工厂模式

工厂模式是设计模式中一个广为流传的模式,这种模式抽象了创建具体对象的过程。如下,

function createPerson(name, age, job) {

 var o = new Object()

  o.name = name

  o.age = age;

  o.sayName = function () {alert (this.name)}
 
  return o;

} 

var person1 = createPerson('111', 18, 'aa');

var person2 = createPerson('222', 19, 'bb');

// 创建了这样一种方式,类似于投入一种固定类的产品,产出一种相同状态的产品,工厂模式给出了这样一种可能,我们能造出无数种这样的数据,

只是,我们任然不能识别出他是什么对象类型的,类似于我们都知道 '' 是字符串类型的样子。我们需要知道他的对象类型。

方式二 - 构造函数模式

function Person(name, age, job) {

  this.name = name;

  this.age = age;

  this.sayName = function () {

    alert(this.name);

  }

}

var person1 = new Person('123', 19, 'engineer');

var person2 = new Person('24', 24, 'fale');

// 对比上述的两种写法,我么看到了

* 没有创建一个对象 

* 将属性,方法赋给了 this

* 没有 return 返回值

* 函数名称首字母大写

* 创建实例时,必须要用到 new 关键字
  1. 我们称以大写字母开头的函数为构造函数,且到我们定义实例时是需要用到需要用 new 去实现的,这一步执行了什么?

    • 创建了一个新对象

    • 将构造函数的作用域赋给新对象

    • 执行构造函数里的代码(赋值,属性,方法)

    • 返回新对象

  2. 通过控制台打印我们能把person1 打印出来看下,在proto里有一个constructor.
    `
    alert(person1.constructor === Person) // true

alert(person2.constructor === Person) // true
`
通过该属性我们可以知道了 person2 是指向到 Person 的,(终于找到组织了)..

这个方法就本身来说,不是我们所推荐的方式。因为有 instanceof 这个操作符。

alert(person1 instanceof Object); // true

alert(person1 instanceof Person); // true

alert(person2 instanceof Object); // true

alert(person2 instanceof Person); // true

注意事项

**
不要将构造函数当作是函数使用,虽然它本身就是函数,任何函数,只要通过 new 关键字去引用那都是被看成是构造函数,但是,一般不建议这样做,我们要做的是遵守约定。


相关文章

网友评论

      本文标题:JS_面向对象_01

      本文链接:https://www.haomeiwen.com/subject/stoanxtx.html