JavaScript之原型|typeof|instanceof
//var 变量X --> 对象 --> 构造器 --> 原型对象
function Person(){};
var stu = new Person();
//var stu = new Person.constructor();//等效
//instanceof:用来确定一个实例是否是由特定函数构造器所创建的;还可以用于判断函数是否继承了其原型链中任何对象(必须要了解:原型链)
stu instanceof Person;//true
typeof stu; // "object"
stu.prototype; //undefined
stu.constructor; // f Person(){}
var 变量X --> 对象 --> 构造器 --> 原型对象
instanceof:
1.用来确定一个实例是否是由特定函数构造器所创建的;
2.还可以用于判断函数是否继承了其原型链中任何对象(必须要了解:原型链)
function Person(){this.name};
function Student(){this.school};
Student.prototype = new Person();//原型链,实现继承
/*
注意:
强烈不推荐: 父类原型直接赋值给子类原型,否则子类原型上的任何修改都将会影响到父类的原型,因为他们是同一个对象
但也有的好处:所有原型中继承的函数都是实时更新的(live-update)
Eg:Student.prototype = Person.prototype;
*/
var stu = new Student();
console.log("stu instanceof Student:",stu instanceof Student);//true
console.log("stu instanceof Person:",stu instanceof Person);//true
//////////////////////|分隔符|/////////////////////
function a(){}
(new a()) instanceof Function //false
function a(){}
(new a()) instanceof a // true
function a(){}
(new a()) instanceof Object // true
hasOwnProperty(item):
objectInstance.hasOwnProperty(item))//用于判断一个属性是否是对象实例定义的,还是从原型导入的
//扩展:对JavaScript原生对象的扩展
//原理:原型对象
Object.prototype.keys = function(){
var keys = [];
for(var item in this)
if(this.hasOwnProperty(item))//用于判断一个属性是否是对象实例定义的,还是从原型导入的
keys.push(item);
return keys;
}
var obj = {"name":"johnny","age":21};
obj.keys();//["name"."age"]
ECMAScript中的(六大)基本数据类型:
1.简单数据类型
Undefined、Null、Boolean、Number、String
2.复杂数据类型
Object
备注:
ECMAScript不支持任何创建自定义的机制,而所有值都最终都将是上述6种数据类型之一。
但由于ECMAScript数据类型具有动态性,因此便没有再定义其他数据类型的必要了。
//变量的动态性:这意味着相同的变量可用作不同的类型: var x // x 为 undefined var x = 6; // x 为数字 var x = "Bill"; // x 为字符串
typeof(A):检测给定变量的数据类型----typeof
函数对象:typeof(function a(){}) //"function"
说明:
1.在safari、chrome中,返回“function”,其他浏览器中返回“object”。
2.从技术角度讲,函数在ECMAScript中是对象,不是一种数据类型。
3.然而,函数也确实有一些特殊的属性。因此通过typeof操作符区分函数和其他对象也是必要的。
对象:typeof({}) //"object"
typeof(null) //"object"
数组对象:typeof([]) //"object"
undefined:typeof(undefined) //"undefined"(便是变量未定义,也可对某变量赋undefined为具体值)
说明:
1.undefined派生自null
2.关于四大值属性(Infinity、NaN、undefined、null字面量),详见MDN:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects
字符串:typeof("") //"string"
数值:typeof(34) // "number"
typeof(NaN) // "number"
布尔:typeof(true) //"boolean"
参考文献
本文作者:
千千寰宇
本文链接: https://www.cnblogs.com/johnnyzen
关于博文:评论和私信会在第一时间回复,或直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
日常交流:大数据与软件开发-QQ交流群: 774386015 【入群二维码】参见左下角。您的支持、鼓励是博主技术写作的重要动力!
本文链接: https://www.cnblogs.com/johnnyzen
关于博文:评论和私信会在第一时间回复,或直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
日常交流:大数据与软件开发-QQ交流群: 774386015 【入群二维码】参见左下角。您的支持、鼓励是博主技术写作的重要动力!

浙公网安备 33010602011771号