游戏测试 小论 JS 原型链 (一)

陈子昂 · 2018年04月05日 · 2182 次阅读

小论 学习

为什么会有这个文章
文章先从 node.js 那边抛出 1 个话题,笔者是一名游戏测试,公司项目压测是 node.js 的,我想了下也挺好,多接触一个东西。一开始只是对着虎去画一只猫,学习之前代码和写的时候,发现有些语法在 node.js 的菜鸟语法没见过。于是在工作之余,对 node.js 这块给自己对自己扫盲,并且安利给广大测试人员,因为 js 也是一门比较出色的胶水语言,值得被骗来学习。

【重要内容】我大概看了下发现 node.js 主体是三个内容,第一块是 js,ECMAScript,我选择入手是 ES5,现在好像大部分都兼容 6 了。但是整个底层库和一些自定义的直接转换起来不确定是否有问题,文章还是 ES5,如果喜欢 6 的,把 5 到 6 拿个在线工具自己转下就行。ECMAScript 还是在他的规范上面,建议是用时查也行。 ECMAScript 核心

第二块 Node.js 和其他 jS 族的对口的 API,这部分可以看下菜鸟语法里面。但 API 替换还是蛮快的,需要随时注意废弃了哪些。废弃在新版本就无法使用了,比如之前压测遇到的大于 4.x 的版本,创建一个 buffer4 以下的版本会有野值。

第三块就是各种 npm 库。一开始你可以先用常用的基础库,然后再用需要其他依赖库的比较大的库。库的选择比较重要。这个建议是可以边查边写。

JS 原型链

JS 也是万物都是对象,但 JS 和 Java 的关系就是雷锋和雷峰塔的关系。
JS 数据类型只有 对象分为函数对象和普通对象,不同语言叫法上会有点差异。什么是普通对象,看创建时和对象返回通过 typeof 打印。
所以要了解原型链先要区分原型对象

const a =new Object(100);//const值是一个只读的常量不可修改 如果下面a转换类型="aaa"就抛错了
//a ="aaaa"//TypeError: Assignment to constant variable.
console.log(a,typeof a) //cout << [Number: 100] 'object'

const b =new Object("bbbb");
console.log(b,typeof b) //cout << [String: 'bbbb'] 'object'

const c =new String("ccc")//
console.log(c,typeof c) //cout << [String: 'ccc'] 'object'

const d =function () {
    夜宵吃什么好 //无聊用,不会引发抛错 <--打半角符号就不行很神奇
    const cb =10
    console.log(cb) //可以想想为啥这里不会生效和中文不抛错,和其他语言一样的
}
console.log(d,typeof d)//cout << [Function: d] 'function'

const e=new function() {//这条和其他有差异的,回头在解释

}
console.log(e,typeof e)// {} 'object' new function是把function当成一个对象、

function f() {

}
console.log(f,typeof f)//cout << [Function: e] 'function'

Number 是基础数据类型,String 具备一些特殊性,语言里面 String 既是基础数据类型,又是复合数据类型
【重要信息】Object 类型是基本数据和属性的结合体代表是普通对象,function 代表是函数对象,上面的对象 e 虽然返回的是 1 个 object,对他也是从 function 创建的,所以也是 1 个函数对象。

原型对象

在 JavaScript 中,每次去定义对象(object),根据对象含义不同会包含数据类型属性。这里我不想用其他语言去绑定一些关系,同事建议的学习还是忘记语言。
首先函数也指向一个对象,所以函数也是对象。函数是通过 prototype 来指向原型对象的。方式就是函数名.prototype.原型对象(object)
我们先构造 1 个函数(构造函数)

var hero =function () {
    hero.prototype.name ="花千骨";
    hero.prototype.sex ="gril";
    hero.prototype.age ="Ghosts kown"
    hero.prototype.Hp =100;
    hero.prototype.say =function () {
        return "子画,我要吃糖醋排骨"
    }
}
xiaogu =new hero() //实例化,让小骨可以使用她的属性
console.log("我的名字系",xiaogu.name+"\n我有一句很重要的话",xiaogu.say())//我的名字系 花千骨 我想说的话 子画,我要吃糖醋排骨 已经说出关键的话。

【重要信息】使用 new 操作符来调用构造函数,并返回对象实例
实际项目里不要这么做,不要给英雄的函数直接绑定一些属性,要写 this.对象 =对象的形式。只有先实例化,才能用 prototype 后面的对象
其他请看后续第二篇。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 0 条回复 时间 点赞
陈子昂 JS 系列学习 基本语法组合 中提及了此贴 04月06日 00:29
陈子昂 小论 JS 原型链 (二) 中提及了此贴 04月06日 10:46
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册