美文网首页
原型的应用

原型的应用

作者: 海子小夜曲 | 来源:发表于2018-12-11 19:35 被阅读0次

    原型的实际应用

    1,将特有的属性 写在构造函数内部

    特有属性 就是指 那些随着对象不同而发生变化的属性:比如 name,age,sex

    2,将共有的属性 写在原型上

    公有属性:同类对象,都有的属性,并且值相同,或者代码逻辑相同

    一般对象的行为(方法)是公有的,都应该写到原型上,实现继承。

    原型链

    1,原型的本质也是对象,就具有__proto__属性。所以原型对象也有原型

    2,任何对象都存在一条链,在这条链上都是原型。将这条链称为原型链。但是原型链不是无穷无尽的。尽头是Object.prototype。

    3,默认原型对象的原型就是Object.prototype。

    4,实质原型链是通过__proto__串联在一起的,同时原型链是用来体现继承关系的链式结构

    属性搜索原则

    当一个对象访问某个属性时,

    1,首先在当前对象检索该属性。如果找到就使用。停止搜索

    2,如果没找到,就像其原型搜索,就返回该属性值。找到就停止

    3,如果没找到,就像其原型搜索,再没有,再往上,找到就返回该属性值。找到就停止。直到Object.prototype。没有就返回undefined

    如果访问的属性是该对象不存在的属性,会检索整个原型链上的所有对象,会导致js性能降低。检索的属性在原型链上越是靠后,检索性能越低。

    在访问属性时,靠前的原型上的同名属性,会覆盖后面原型上的值。

    绘制原型链

    1,写出原型链

    2,将链上 的所有对象依次绘制出

    instanceof运算规则

    1,语法:<对象>  instanceof  函数

    2,用来判断对象是否为指定函数的实例。 返回布尔值

    3,运算规则

    如果函数的原型出现在该对象的原型链上的话,表达式返回值为true。否则false。

    Object.prototype上一些方法

    1,hasOwnProperty

    *语法:<对象>.hasOwnProperty('propName')

    *功能:用来判断,属性是自己的还是继承的

    2,propertyIsEnumerable

    *语法:<对象>.propertyIsEnumerable('propName')

    *功能:是上一个方法的加强版。

    *是自己属性

    *而且是可枚举的。(使用 for in可遍历到的属性,即可枚举属性)

    3,isPrototypeOf

    *语法:<对象a>.isPrototypeOf(对象)

    *功能:判断对象a是不是对象b的原型。

    4,valueOf

    *语法:<对象a>.isPrototypeOf()

    *功能:将制定对象类型的数据,转换成基本类型

    *规则:

    *如果该对象是基本数据的包装类型,会转换成其对应的基本数据类型

    *否则为其他对象类型,就直接返回该对象

    5,。 toString

    *语法:<对象>.toString()

    *功能:负责展示对象的基本信息(对象的类型 type of 的返回值,以及其构造函数)

    *返回值为“【typeof 的返回值 构造函数的额名字】”

    函数

    1,函数创建方式

    *声明式

    *函数表达式

    *构造函数模式  var f =new Function();

    2,Function构造函数

    *语法 var f =new Function([argi~argN],body);

    *[argi~argN] 类型为字符串,可选参数。用来定义生成函数f的形参

    *body 类型为字符串,可选。用来实现函数体

    *如果没有传参,生成一个没有形参

    3,函数也是一种对象类型

    eval方法

    1,json数据

    *以键值对形式存储数据。

    *键 必须是字符串类型并且用两个双引号来表示字符串

    *值 除了数字类型,其他都必须用双引号包裹起来。

    2,json在数据传输时,客户端得到的是一个字符串类型,在实际操作时必须转换成对象才能解析数据。

    3,由于eval方法可以将一段字符串就当做js代码来执行。因此使用json做数据传输的案例中,可以使用eval来将json字符串 转换成js对象

    4.应用场景

    在使用Ajax做无刷新页面时,通常使用json作为数据传输格式,所以要使用eval方法来将字符串转换成对象格式

    5,在没有严格模式,eval可以随意指定一段字符串当做js代码来执行。

    *脚步注入

    *全局变量以及全局对象污染

    eval创建变量的作用域 是有eval执行的作用域决定的

    6,使用(new Function(str))();也可以将str字符串当做js代码来执行,同时他有一个好处-不会污染全局变量以及全局对象。

    所有函数的原型都是Function.prototype. 

    Function()  本身也是函数对象。因此他也有__proto__属性。

    一般函数都有prototype属性。但是Function.prototype这个

    函数没有prototype属性。因为他是一个原型,具有原型属性。

    相关文章

      网友评论

          本文标题:原型的应用

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