美文网首页
高程三 关于原型链 阅读笔记

高程三 关于原型链 阅读笔记

作者: 6659a0f02826 | 来源:发表于2018-02-07 09:47 被阅读10次

许多OO语言都支持两种继承方式:接口继承和实现继承。
接口继承只继承方法签名,而实现继承则继承实际的方法。
由于函数没有签名,在ECMAScript中无法实现接口继承,只支持实现继承,而且其实现继承主要是依靠原型链来实现的。

  1. instanceof()检测对象类型
var a = {};
a instanceof Object   // true
  1. isPrototypeof()
    确定对象之间是否存在关系
    如果[[Prototype]]指向调用isPrototyprof()方法的对象(Person.prototype)那么这个方法就返回true
alert(Person..prototype.isPrototypeof(person1))  //true
(这里person1是Person的一个实例)
  1. Object.getPrototypeof(),这个方法返回[[Prototype]]的值。
    Object.getPrototypeof()返回的对象实际就是这个对象的原型。
    第二行代码取得了原型对象中name的值,也就是"Nicholas"。
alert(Object.getPrototypeof(person1) == Person.prototype);  //true
alert(Object.getPrototypeof(person1).name);  //"Nicholas"
  1. delete 使用这个操作符可以完全删除实例属性
function Person(){
}

Person.prototype.name = "zhangsan";
var person1 = new Person();
var person2 = new Person();

person1.name = "lisi";

alert(person1.name);//"lisi" ——来自实例
alert(person2.name);//"zhangsan" ——来自原型

delete peison1.name;
alert(person1.name);//"zhangsan" ——来自原型
  1. hasOwnProperty()是否有自己的实例属性
function Person(){
}

Person.prototype.name = "zhangsan";
var person1 = new Person();
var person2 = new Person();

person1.name = "lisi";

alert(person1.hasOwnProperty("name"));//true
alert(person2.hasOwnProperty("name");//false

delete peison1.name;
alert(person1.hasOwnProperty("name"));//flase
  1. Object.getOwnPropertyDescriptor() 用于取得实例属性的描述符

要取得原型属性的描述符,必须直接在原型对象上调用Object.getOwnPropertyDescriptor()。

  1. Object.keys()

取得所有可枚举的实例属性

function Person(){
}

Person.prototype.name = "zhangsan";
Person.prototype.age = 28;
Person.prototype.job = "software engineer";
Person.prototype.sayName =function(){
  alert("this.name")
}

var keys = Object.keys(Person.prototype);
alert(keys); //"name,age,job,sayName"

var p1 = new Person();
p1.name = "Rob";
p1.age = 27;

var p1keys = Object.keys(p1);
alert(p1keys);  //"name,age"

变量keys中将保存一个数组。

如果你想得到所有实例属性,无论是否可枚举,都可以使用Object.getOwnPropertyNames()方法。

var keys = Object.getOwnPropertyNames(Person.prototype);
alert(keys);  //"constructor, name, age, job, sayName"

注意结果中包含了不可枚举的constructor属性。
Object.keys() 和 Object.getOwnPropertyNames() 都可以代替for-in循环。

相关文章

  • 高程三 关于原型链 阅读笔记

    许多OO语言都支持两种继承方式:接口继承和实现继承。接口继承只继承方法签名,而实现继承则继承实际的方法。由于函数没...

  • 高程 原型(笔记)

    1、原型的动态性 重新原型后切断了 现有原型与任何之前实例对象之间的关系;它引用的还是之前的原型 function...

  • 读《javaScript高级程序设计-第6章》之继承

    读这篇之前,最好是已读过我前面的关于对象的理解和封装类的笔记。 一、原型链 原型链最简单的理解就是:原型对象指向另...

  • JavaScript中的原型概念

    秉着温故知新的原则,又复习了一遍高程中关于原型的概念,这里做一个学习笔记。 原型概念 无论何时只要创建了一个函数,...

  • 夯基础-手撕js原型、原型链

    作为从前端刀耕火种年代走过来的物种-js原型,原型链,我表示当初高程看了不下三五遍也没能真正消化他,emmmmmm...

  • 高程原型链的mini例子

    修改和继承原型 原型链最带的问题就是当定义的类中含有引用类型的值,比如数组,当通过原型链继承的时候,修改应用类型的...

  • 关于JS中的原型和原型链

    目录 关于js 对象和原型 原型链 基于原型链的继承 参考资料ECMAScript 6 入门JavaScript原...

  • 原型链结构图

    原型链结构图 代码示例 原型链图示例 Function.prototype原型链 关于Function和自定义构造...

  • 六种继承方式

    一致对继承只了解了三种,今天看了JS高程,发现讲的很清晰 ,自己在这里记录一下:父类: 原型链继承,构造函数继承,...

  • 原型、原型链、继承 | JavaScript

    原型与原型链 基本概念 关于原型和原型链的知识,首先来理解下以下几个知识点: 所有引用类型(Object、Arra...

网友评论

      本文标题:高程三 关于原型链 阅读笔记

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