原型链&Object的一些方法

经典继承封装函数
o1.__proto__===O.prototype===o2
构造函数的实例的__proto__和构造函数的prototype是全等于的
function craeate(obj){
function F(){};
F.prototype=obj;
return new F();
}

ES5(IE9+)支持Object.create()固定方法
var o1={name:"男"};
var o2=Object.create?Object.create(o1):create(o1);能力检测

原型链:任何对象都是继承自原型对象,原型对象也有它自己的原型对象,总是有一个对象,是没有

__proto__属性的,这个对象,就是原型链的顶端
var o={};
console.log(o.__proto__);
var arr=[];
console.log(arr.__proto__.__proto__);
var f1=function(){};
console.log(f1.__proto__.__proto__);
var reg=/[0-3]/;
console.log(reg.__proto__.__proto__);

任何一个对象的prototype都定义了一个toString()
obj.toString()---->"[object Object]"
arr.toString()---->"1,2,3"
reg.toString()---->"/hello/"正则表达式的字符串类型
判断内置对象的时候,可以使用Object.prototype.toString.call(对象)
得到"[object 对象的数据类型]"
Object.prototype.toString.call(arr)
Object.prototype.toString.call(reg)
Object.prototype.toString.call(new Date())得到一个[object,数据类型]

判断一个对象是否拥有自己的属性hasOwnProperty,返回布尔类型
o.hasOwnProperty("属性")

判断当前对象是否是参数对象的原型对象isPrototypeOf
ar o1={};
Object.prototype.isPrototypeOf(o1)返回布尔值

判断当前对象的某个属性是否是可枚举的propertyIsEnumerable,所谓不可枚举的属性就是不能被

for(key in o)遍历
Object.defineProperty(obj,"gender",{value:"男"})给obj增加不可以枚举属性"gender"
value属性给gender设置了值,还有别的属性enumerable:false默认为false,为true时表示是可枚举

属性,
writable:true可写的对象,为true时才能被赋值运算,writable:false时不能赋值运算,默认为false
get:function(){return "男"}return的值就是属性设置的值,外面就不用写value了
set接受唯一参数,并将该参数的新值分配给属性gender
var _number;
var o2={};
Object.defineProperty(o2,"number",{
get:function(){//获取number属性值的时候就会执行这个函数
return _number || 0;
},
set:function(v){
if(v>50){
_number=v;
}
}
});
o2.number=35;//把35赋值给v

a instanceof b 检测a是否是b的实例,任何对象都是Object的实例
var apple=new Computer();
console.log(apple instanceof Computer);
console.log(apple instanceof Object);

var arr=[];
console.log(arr instanceof Array);//true
console.log(arr instanceof Object);//true

var reg=/word/;
console.log(reg instanceof RegExp);//true
console.log(reg instanceof Object);//true

所以检测一个数据的对象类型这里有两种方法,比如检测对象是不是数组
[] instanceof Array Object.prototype.toString.call([])==="[object Array]"

时间: 2024-12-21 23:49:45

原型链&Object的一些方法的相关文章

[js高手之路]原型对象(prototype)与原型链相关属性与方法详解

一,instanceof: instanceof检测左侧的__proto__原型链上,是否存在右侧的prototype原型. 我在之前的两篇文章 [js高手之路]构造函数的基本特性与优缺点 [js高手之路]一步步图解javascript的原型(prototype)对象,原型链 已经分享过了. function CreateObj(uName) {             this.userName = uName;             this.showUserName = function

javascript的oop——>>> [__proto__ 与 prototype/原型链/原型属性与原型方法/for-in循环]

  前  言  OOP  javascript的oop中的__proto__  与  prototype/原型链/原型属性与原型方法/for-in循环 1  __proto__  与  prototype/原型链   1.prototype(函数的原型):函数才有prototype.prototype是一个对象,指向了当前构造函数的引用地址呢.                       2.__proto__(对象的原型对象):所有对象都要__proto__属性.当用构造函数实例化(new)一

关于JS中原型链中的prototype与_proto_的个人理解与详细总结(代码示例+高清无码大图!——自备瓜子花生)

一直认为原型链太过复杂,尤其看过某图后被绕晕了一整子,今天清理硬盘空间(渣电脑),偶然又看到这图,勾起了点回忆,于是索性复习一下原型链相关的内容,表达能力欠缺逻辑混乱别见怪(为了防止新人__(此处指我)__被在此绕晕,图片就放在末尾了.) 以下三点需要谨记 1.每个对象都具有一个名为__proto__的属性: 2.每个构造函数(构造函数标准为大写开头,如Function(),Object()等等JS中自带的构造函数,以及自己创建的)都具有一个名为prototype的方法(注意:既然是方法,那么就

JS中注意原型链的“指向”

昨天压缩Js文件时发现了项目中的一个prototype的问题代码如下所示: 1. <script> var XXX = function(){ }; var x1 = new XXX(); XXX.prototype.fnx = function(){ alert("123"); } x1.fnx(); </script> 2. <script> var XXX = function(){ }; var x1 = new XXX(); XXX.pro

老生常谈之JavaScript原型链继承

介绍 本文总结了ES3,ES5,ES7和NS(NonStandard)四种原型链继承的实现方法. 前言 ECMAScript 6 class将给开发者带来JavaScript OOP的规范实现,但这种方式的直接应用和普及至少得等到IE11被淘汰掉,而到那时,说不定我们已转向边沿领域了. 随着Web的快速发展,新的方法可能会随时取代旧的方法,而我们在lifetime中用过的方法,代表着一代人的记忆,又怎能忘怀? 分享 另附上BDD测试 这其中: 较新的JavaScript运行环境能兼容旧的继承方法

js【Object.prototype.hasOwnProperty()方法】

概述 hasOwnProperty() 方法用来判断某个对象是否含有指定的自身属性. 语法 obj.hasOwnProperty(prop) 参数 prop 要检测的属性名称. 描述 所有继承了 Object.prototype 的对象都会从原型链上继承到 hasOwnProperty 方法,这个方法可以用来检测一个对象是否含有特定的自身属性,和 in 运算符不同,该方法会忽略掉那些从原型链上继承到的属性. 示例 例1:使用 hasOwnProperty 方法判断某对象是否含有特定的自身属性 下

JavaScript提高篇之面向对象之单利模式工厂模型构造函数原型链模式

1.单例模式 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>面向对象之单例模式</title> 6 </head> 7 <body> 8 9 <script type="text/javascript"> 10 //对象数据类型

用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- 使用原型链和EventTrigger

原型链是JS的必备,作为ECMAScript4,原型链也是支持的. 特别说明,ActionScript3是支持完整的面向对象继承支持的,原型链只在某些非常特殊的情况下使用. 本文旨在介绍如何使用原型链. 任意对象类型都有一个prototype属性,包括导入的Unity的API也有.我们可以和JS一样的对这个prototype进行操作,比如动态的添加成员,添加方法等. 如果您决定使用原型链,那么必须舍弃编译时类型检查.如果使用强类型,则编译器会认为动态添加的成员不存在,而提示编译错误.解决办法为去

03. JavaScript高级(3/5)(原型链讲解)

一.原型以及原型链 基础概念: 实例对象的__proto__和构造函数的原型prototype指向相同 实例对象中的__proto__原型指向的是构造函数中的prototype原型 实例对象中的__proto__是原型,是浏览器使用的 构造函数中的prototype是原型,是程序员使用的 实例对象中的proto指向的是构造函数中的prototype所指向的原型对象, 原型链:是一种关系,实例对象和原型对象之间的关系,这种关系是通过实例对象中的原型(proto)来联系的. 改变原型链指向 构造函数