北大青鸟凯天校区
400-100-5515

JavaScript基于原型的面向对象系统

2018-03-21 来源:未知 阅读:()

 我们知道在JavaScript中一切(引用类型)都是对象,对象是属性的集合,但是JavaScript中的对象到底是怎么创建的呢?在Java中是通过实例化类来创建一个对象,对象总是从类中的创建而来;在JavaScript中没有类(ES6中的class只是一个语法糖)的概念,那么JavaScript中的对象呢?JavaScript是基于原型的面向对象语言,在原型编程思想中,类并不是必需的,对象未必需要从类中创建而来,一个对象是通过克隆另外一个对象所得到的。重要的事情说三遍:对象是通过克隆另外一个对象所得到的对象是通过克隆另外一个对象所得到的对象是通过克隆另外一个对象所得到的

  JavaScript原型模式是用于创建对象的一种模式,先找到一个对象,然后通过克隆来创建一个一模一样的对象。ECMAScript5提供了Object.create()方法,可以用来克隆对象。

let Person = function () {
  this.name = 'shanshui'
  this.age = '18'
}
let person = new Person()
person.name = 'zinong'
person.age = '20'
let clonePerson = Object.create(person)
console.log(clonePerson.name) // 'zinong'
console.log(clonePerson.age) // '20'

  new做法是新建一个Object对象obj ,并且让obj 的__proto__指向了Person.prototype对象,并且使用call 进行强转作用环境,从而实现了实例的创建。

  Object.create的实现代码如下,Object.create内部定义了一个F构造函数,并且让F.prototype对象赋值为引进的对象/函数proto,并return出一个新的对象。Object.create克隆返回的对象也是使用new运算符创建的。

if (typeof Object.create !== "function") {
    Object.create = function (proto, propertiesObject) {
        if (typeof proto !== 'object' && typeof proto !== 'function') {
            throw new TypeError('Object prototype may only be an Object: ' + proto);
        } else if (proto === null) {
            throw new Error("This browser's implementation of Object.create is a shim and doesn't support 'null' as the first argument.");
        }

        if (typeof propertiesObject != 'undefined') throw new Error("This browser's implementation of Object.create is a shim and doesn't support a second argument.");

        function F() {}
        F.prototype = proto;

        return new F();
    };
}

免责声明:本文来源于网络,由网友提供或网络搜集,仅供个人交流学习参考使用,不涉及商业盈利目的。如有版权问题,请联系本站管理员予以更改或删除。谢谢合作!

上一篇:用.NET开发通用Windows App

下一篇:没有了

推荐阅读

咨询电话(09:00-22:00)400-100-5515 在线客服点击咨询 沈阳北大青鸟公众号 北大青鸟官方公众号
帅哥靓姐带你突飞猛进,
技术大神助你高薪飞翔!