JavaScript 常用功能总结(4)

通过调用超类的构造函数Person.call( this, ...),来创建新对象。其中This指的是Student,Property Slots 在超类的构造函数中已经创建((firstName 和lastName) 以及其他子类相关的属性。在这种情况下可使用Property Inheritance 机制保证所有的属性已经被定义且被创建。

Step2b,通过构造函数的prototype 属性安装method inheritance 。如下,分配了一个新对象创建子类型构造函数的Prototype 属性,并做出适当的调整:

// Student inherits from PersonStudent.prototype = Object.create(      Person.prototype);// adjust the subtype's constructor propertyStudent.prototype.constructor = Student;

Step2c, 重新定义子类方法重写超类方法:

Student.prototype.toString = function () {  return Person.prototype.toString.call( this) +      "(" + this.studNo + ")"; };

基于构造器类的实例化是通过应用new 操作符来创建的,并提供合适的构造参数:

var pers1 = new Person("Tom","Smith");

方法toString 通过pers1. 来调用:

alert("The full name of the person are: " +       pers1.toString());

在JS中,prototype 是具有method slots 的对象,可以通过JS方法或属性槽继承的。

基于Factory 的类

在该方法中定义了JS 对象Person,含有特殊的Create 方法来调用预定义的Object.Create方法,创建Person类型的对象;

var Person = {   name: "Person",   properties: {     firstName: {range:"NonEmptyString", label:"First name",          writable: true, enumerable: true},     lastName: {range:"NonEmptyString", label:"Last name",          writable: true, enumerable: true}   },   methods: {     getFullName: function () {      return this.firstName +" "+ this.lastName;      }   },   create: function (slots) {    // create object     var obj = Object.create( this.methods, this.properties);    // add special property for *direct type* of object     Object.defineProperty( obj, "type",          {value: this, writable: false, enumerable: true});    // initialize object     Object.keys( slots).forEach( function (prop) {      if (prop in this.properties) obj[prop] = slots[prop];     })    return obj;   } };

注意JS对象Person实际表示的是factory-based 类。factory-based类的实例化是通过调用它自己的Create方法实现的:

var pers1 = Person.create( {firstName:"Tom", lastName:"Smith"});

getFullName 方法是通过pers1. 调用的,如下:

alert("The full name of the person are: " + pers1.getFullName());

每个属性的声明都是使用Object.Create 声明的,其中包含三个参数及值,'descriptors'writable: true and enumerable: true;如上面第五行的。

linux

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/3ff3025158fc7d0cb2968a3f0c15d609.html