美文网首页
js的new运算符详解

js的new运算符详解

作者: 吃自己家大米 | 来源:发表于2020-06-17 10:39 被阅读0次

new 后面需要跟一个函数(此时这个函数就称作构造函数)用来创建并初始化对象。这种方式创建的对象分两种,一种是js本身的内置构造函数,一种是用户自定义的构造函数。

1.内置构造函数

var obj=new Object();
var arr=new Array();
var date=new Date();
var reg=new RegExp();
......
等等

此外 string、number 和 boolean 这三个原始类型对应的 new String()、new Number() 和 new Boolean() 被创建出来的特别被称为 包装对象【关联:js的包装对象】

2.自定义构造函数

一般用这个自定义类,约定首字母大写,以方便判断是不是配合 new 创建对象用的,不然其自身作为普通的函数调用是没什么意义的。

通过 new 自定义对象只需要两步:
(1)编写一个函数定义对象类型(以下定义了 Vegetable 类型);
(2)使用 new 创建对象实例。

var Vegetable = function () {   //蔬菜类
    this.spinage = 'spinage';
}
Vegetable.prototype.stock = function (name) {
    this[name] = name;
}
Vegetable.prototype.eat = function (name) {
    delete this[name];
}
var vege = new Vegetable();

vege.stock('potato');
vege.stock('spinage');

var Animal=function(params){    //动物类
    this.default=params;
}
Animal.prototype.eat=function(name){   
    this[name]=name;
}
var cat=new Animal({legs:4,color:'blue'});

3.new constructor[([arguments])] 执行过程

拿上面的 Vegetable 举例。

(1)创建继承自构造函数的新空对象——{}的 __proto__ 为 stock:f(name)、eat:f(name)、constructor:f()、__proto__:Object;
(2)运行构造函数,并将 this 指向这个新对象——运行后,this指代新对象,{}则自然变成了{spinage:spinage}, __proto__ 不变;
(3)最后(2)的新对象赋值给 vege
(4)特别有一点,如果 Vegetable 是有返回值,看下面的代码(一般不会这么写)。那么最后赋值给 vege 的就不是 (2)中的新对象,因为被返回值给覆盖掉了。这样后面的两个调用语句自然会报错,因为vege并没有继承到 Vegetable 定义的 prototype。

var Vegetable = function () {
    this.spinage = 'spinage';
    return {
      tomato:'tomato'
    }
}
Vegetable.prototype.stock = function (name) {
    this[name] = name;
}
Vegetable.prototype.eat = function (name) {
    delete this[name];
}

var vege = new Vegetable();

vege.stock('potato');  // 此时这里会报错
vege.stock('spinage');  // 此时这里会报错

4、另外两种创建对象方法

(1)对象直接量
就是直接赋值

var obj={};
var obj2={name:'amy'};
......

(2)Object.create()
以一个对象为原型创建另一个新对象。

var obj=Object.create({a:'123'});

var o={b:'b'};
var obj2=Object.create(o);

......

感谢阅读,喜欢的话点个赞吧:)
更多内容请关注后续文章。。。

相关文章

  • js的包装对象

    在另一篇文章 js的new运算符详解 提到过包装对象,这里详细解释下。 我们之前说string、number 和 ...

  • js的new运算符详解

    new 后面需要跟一个函数(此时这个函数就称作构造函数)用来创建并初始化对象。这种方式创建的对象分两种,一种是js...

  • js面试题--new的原理

    JS中的new操作符 和其他高级语言一样,JS中也有new运算符,我们知道new运算符是用来实例化一个类,从而在内...

  • js--new运算符详解

    new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。 new 关键字会进行如下的操作 1...

  • js中的 || 与 && 运算符详解

    这篇文章主要介绍了js中的 || 与 && 运算符详解,需要的朋友可以参考下 一 js中逻辑运算符在开发中可以算是...

  • 【Javascript】彻底捋清楚javascript中 new

    new 运算符 在js中,new()常被用来创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例 new...

  • JS中new详解

    new对象底层发生了什么 new 一个实例对象的底层实际就3步 1.创建一个 Object 对象 2.让新创建的对...

  • JS笔记9:流程控制

    顺序结构 分支结构 循环结构 参考 1、js中的三目运算符详解[https://blog.csdn.net/sys...

  • JS博客

    JS构造函数及new运算符 JS原型对象和原型链 函数作用域和作用域链 干货分享:让你分分钟学会JS闭包 深入理解...

  • JavaScript 02 (运算符和选择结构)

    js的关系运算符,js的逻辑运算符,js的赋值运算符,js的运算符的优先级问题,js的自增和自减,js的选择结构 ...

网友评论

      本文标题:js的new运算符详解

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