美文网首页
创建对象的方法(二)

创建对象的方法(二)

作者: QinRenMin | 来源:发表于2018-05-29 19:42 被阅读0次
  • 原型模式
    一提到原型,大家是不是觉得头大大大大,但是呢,要敢于挑战,静下心来,就会有不一样的收获;
    我们创建的每一个函数都有prototype(原型)属性,这个属性是一个指针,指向了一个对象;
    使用原型对象的好处就是可以让所有的对象实例共享它的属性和方法;
    不必在构造函数中定义对象实例的信息,将这些信息直接添加到原型对象中;
function Person() {

}

Person.prototype.name = "qrm";
Person.prototype.age = 20;
// noinspection JSAnnotator
Person.prototype.say = function () {
    console.log(this.name);
};

let person1 = new Person();
person1.say(); //qrm

let person2 = new Person();
person2.name = "qwe";
person2.say(); //qwe
console.log(person1.say===person2.say);//true

理解原型:



属性对象和实例之间的判断

console.log("name" in person1); //true 原型中
console.log("name" in person2); //true 实例中
console.log(person1.hasOwnProperty("name")); //false 实例没有name属性
console.log(person2.hasOwnProperty("name"));//true 实例有name属性

//如何判断属性在实例中还是原型中?
let person3 = new Person();

if(person3.hasOwnProperty("name") &&("name" in person3) === true)
{
    console.log("name属性在实例中");
}
else{
    console.log("name属性在原型中");
}

person3.name = "assdf";

if(person3.hasOwnProperty("name") &&("name" in person3) === true)
{
    console.log("name属性在实例中");
}
else{
    console.log("name属性在原型中");
}

取得对象上所有可以枚举的实例属性,Object.keys()方法,接收一个对象作为参数,返回所有可以枚举属性的字符串数

let key = Object.keys(Person.prototype);
console.log(key);


let person4 = new Person();
person4.name = "qqqqq";
let p4key = Object.keys(person4);
console.log(p4key);

//得到所有的实例属性

let keys = Object.getOwnPropertyNames(Person.prototype);
console.log(keys);

//输出值为:
//     [ 'name', 'age', 'say' ]
//     [ 'name' ]
//     [ 'constructor', 'name', 'age', 'say' ]
//

  • 用简单的原型写法
function P() {

}

P.prototype={
    name:"zzz",
    age : 23,
    tell:function () {
        console.log(this.age);
    }
};

let P1 = new P();

console.log(P1 instanceof Object); //true
console.log(P1 instanceof P); //true

console.log(P1.constructor === P); //false
console.log(P1.constructor === Object); //true

上述方法无法确定对象的类型 ,可以将constructor属性设置为适当的值
但是重新设置的constructor会将[[Enumerable]]设置为true
解决该类问题,引入Object.defineProperty(P.property,"constructor",{enumerable:false})

对于原型这一块的理解,应当更加深入,为后来的继承问题做好铺垫.
学习这块内容要淡定,从容,平静,多看多理解咯....

相关文章

  • JS基础 - 创建对象

    一、创建对象 方法一 直接创建字面量 方法二 声明对象字面变量,向对象添加新成员 二、定义对象函数 方法一 对象字...

  • Ⅷ.I/O

    一、文件对象 创建对象 常用方法 二、

  • JavaScript_对象

    一、时间对象(Date) (一)Date对象的创建 (二)Date对象的方法 (三)设置与获取的常用方法 二、对象...

  • JavaScript常用对象和方法

    String 一、创建方式 二、属性和方法 Array 一、创建方式 二、属性 三、常用方法 Date 对象的创建...

  • 创建对象的方法(二)

    原型模式一提到原型,大家是不是觉得头大大大大,但是呢,要敢于挑战,静下心来,就会有不一样的收获;我们创建的每一个函...

  • js 创建对象

    创建对象的几种方法 方法一:new Object() 方法二:{} 方法三:function xx() 为对象中添...

  • Effective Java

    一、 静态工厂方法 二、 创建对象的时候使用Builder Builder 方式创建的对象,在调用 build()...

  • vue时间转换为字符串

    1、方法一: 结果打印如下: 2、方法二: 3、方法三 Date 对象的方法简介: 创建新的 Date 对象语法:...

  • [Effective Java] (01)静态工厂方法代替构造器

    1. 创建对象 1.1 构造方法创建对象 在Java中,创建对象常用的方法是通过公有的构造方法创建;如:Boole...

  • Java enum枚举详解

    一、enum 对象的创建和常用方法介绍 1.首先我们先来新建一个枚举 2.创建枚举对象以及对象方法介绍 二、给 e...

网友评论

      本文标题:创建对象的方法(二)

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