javascript - 关于ES6中class类的一些疑问

查看:103
本文介绍了javascript - 关于ES6中class类的一些疑问的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

关于ES6中class类的一些疑问

RT

之前直接用构造函数模拟类是这样的:

//ES5.js
function Person(name,age){
 this.name=name;
 this.age=age;
}

1、这个Person构造函数本身用于模拟类。
可以添加类方法:

Person.classMethod=function(){cosole.log('我是一个类方法');}

2、定义Person产生了一个原型对象Person.prototype,原型对象的constructor指向Person自己。

现在使用ES6的class

//ES6.js
class Person{
 constructor(name,age){
  this.name=name;
  this.age=age;
}
fn1(){
 return `我是${this.name},今年${this.age}岁.`;
}
}

疑问:

1、class Person里面的construccor跟ES5.js中的构造函数function Person(){...}是一回事么?这个外面套一层class Person有什么意义?

2、class Person里的fn1是原型上的方法Person.prototype.fn1?还是等同于Person.classMethod类方法?

解决方案

好吧。。自己解决了。。

//modulePerson.js
//ES6中class类
class Person {
constructor(name, age) {
//constructor等同于function Person(name,age){}构造函数
    this.name = name;
    this.age = age;
    this.init();
    //构造函数中调用init,省去【实例】调用
}
init() {
    this.say();
    //调用另一个原型方法say;
}
say() {
    //此处say方法等同于Person.prototype.say=function(){}原型方法,
    console.log(`我是${this.name},我今年${this.age}岁了。`);
}
}
export { Person };

//entry.js
import { Person } from './Person.js';
new Person('小明', 20); //实例化并传参数

不过有个新的问题。。
写插件的时候不想用jQuery的$.extend合并,用了ES6的 Object.assign();

this.config = Object.assign({}, defaults, settings)

ES6转ES6编译出来的这个:

if (!Object.assign) {
    Object.defineProperty(Object, "assign", {
        enumerable: false,
        configurable: true,
        writable: true,
        value: function(target, firstSource) {
            "use strict";
            if (target === undefined || target === null)
                throw new TypeError("Cannot convert first argument to object");
            var to = Object(target);
            for (var i = 1; i < arguments.length; i++) {
                var nextSource = arguments[i];
                if (nextSource === undefined || nextSource === null) continue;
                var keysArray = Object.keys(Object(nextSource));
                for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex++) {
                    var nextKey = keysArray[nextIndex];
                    var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);
                    if (desc !== undefined && desc.enumerable) to[nextKey] = nextSource[nextKey];
                }
            }
            return to;
        }
    });
};

在IE8上报错。说不支持语法。。。哪位知道是怎么回事?拜谢解答、、

这篇关于javascript - 关于ES6中class类的一些疑问的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆