JS函式,物件,例項方法,物件方法理解
var _s = function(){
var name = 'lisa'; //內部屬性
var age = 10;
var sen = function(){
console.log("函式_s") ; //函式內部屬性,作用域只在函式內部,
}
return "1";
}
function _e(){
name = 'lisa';
age = 10;
sen = function(){
console.log("函式_E");
}
}
var Person=function(){
this.sn = 'sam'; //例項屬性、例項方法
};
Person.say=function(){ //靜態方法
console.log('I am a Person,I can say.')
};
var person1 = new Person();
person1.getName=function(name){ //例項方法
console.log('My name is '+name);
}
Person.prototype.gets = function(){ //例項方法,函式原型屬性定義的屬性或者函式可以被函式所有例項物件所共用。
console.log("原型方法");
}
console.log(window.sn); //普通的函式內部this指向了當前window物件,所以賦值也是
//new 函式物件例項化後,函式屬性的this指向就發生了變化,this由原來指向window物件變為指向當前例項物件
console.log(new Person().sn); //例項化之後this指向當前物件,所以當前物件具有了sn屬性
console.log(new Person().gets());
console.log(new Person());
//同時在例項上、原型引用上和“this”上定義了相同名字的例項方法後,例項會優先呼叫那一個?
- var BaseClass = function() {
- this.method1 = function(){
- alert(' Defined by the "this" in the instance method');
- }
- };
- var instance1 = new BaseClass();
- instance1.method1 = function(){
- alert(' Defined directly in the instance method');
- }
- BaseClass.prototype.method1 = function(){
- alert(' Defined by the prototype instance method ');
- }
- instance1.method1();//Defined directly in the instance method
通過執行結果跟蹤測試可以看出直接定義在例項上的變數的優先順序要高於定義在“this”上的,而定義在“this”上的又高於 prototype定義的變數。即直接定義在例項上的變數會覆蓋定義在“this”上和prototype定義的變數,定義在“this”上的會覆蓋prototype定義的變數
總結:JS靜態方法或靜態屬性只能由JS函式(理解為類)呼叫,例項方法或者例項屬性只能由JS例項物件呼叫。
======================================================
函式例項化過程:
建構函式不需要顯示的返回值。使用new來建立物件(呼叫建構函式)時,如果return的是非物件(數字、字串、布林型別等)會忽而略返回值;如果return的是物件,則返回該物件。
下面簡單介紹下,javascript中new物件的過程:如var myObj = newPerson(“aty”,25);
1.建立一個空的Object物件.var obj = new Object();
2.將建構函式Person中this指向剛建立的obj物件
3.將建立的obj的__proto__指向建構函式Person的prototype。這一步是建立物件和原型直接的對應關係。firefox下通過
物件的__proto__屬效能夠訪問到原型,IE下則沒有暴露出相應的屬性。
4.執行建構函式Person()中的程式碼
//JS 函式本身就是一個建構函式,和匿名建構函式Function 是一樣的,但是Function需要new才產生一個匿名函式,
new操作符具體幹了什麼呢?其實很簡單,就幹了三件事情。
function Base(){}
var obj = new Base();
var obj = {};
obj.__proto__ = Base.prototype;
Base.call(obj); // 非常重要:將this物件的指向改變
/*第一行,我們建立了一個空物件obj
第二行,我們將這個空物件的__proto__成員指向了Base函式物件prototype成員物件
第三行,我們將Base函式物件的this指標替換成obj,然後再呼叫Base函式,於是我們就給obj物件賦值了一個id成員變數,這個成員變數的值是”base”,關於call函式的用法。*/
//Function建構函式,new Function 建立匿名函式
var BaseClass = new Function;
var Class2 = BaseClass;
BaseClass.f1 = function(){
console.log("BaseClass ' s static method");
}
Class2.f2 = function(){
console.log("Class2 ' s static method");
}
BaseClass.f1();//BaseClass ' s static method
BaseClass.f2();//Class2 ' s static method
Class2.f1();//BaseClass ' s static method
Class2.f2();//Class2 ' s static method
相關文章
- 理解Python中的類物件、例項物件、屬性、方法Python物件
- 例項物件和函式物件的區別物件函式
- php例項化物件的例項方法PHP物件
- 理清原型物件、 例項物件、建構函式原型物件函式
- 私有建構函式的物件建立例項函式物件
- PHP類和物件函式例項詳解PHP物件函式
- 5-函式與物件的方法函式物件
- js建立字典物件例項JS物件
- 原生js使用物件導向的方法開發選項卡例項教程JS物件
- js函式,arguments物件JS函式物件
- fastjson 物件字串互轉方法例項ASTJSON物件字串
- JS_建立物件+呼叫物件方法JS物件
- Python - 物件導向程式設計 - 例項方法、靜態方法、類方法Python物件程式設計
- js的函式和物件JS函式物件
- js物件合併方法JS物件
- js建立物件的方法JS物件
- json例項練習 json物件JSON物件
- ejb主物件,物件,例項 ?物件
- 引用物件與例項物件物件
- js 物件反射使用程式碼例項JS物件反射
- $.each()函式遍歷陣列和物件程式碼例項函式陣列物件
- 函式物件、物件、原型函式物件原型
- 對JavaScript中函式物件的理解JavaScript函式物件
- 理解建構函式與原型物件函式原型物件
- 理解物件以及物件的屬性、方法、事件 (轉)物件事件
- XSL函式二----DOM中物件的方法 (轉)函式物件
- js物件的複製方法JS物件
- JS中建立物件的方法JS物件
- js正則建立物件方法JS物件
- js常見物件及方法JS物件
- javascript基礎(this,工廠方法來建立物件,建構函式建立物件)(十六)JavaScript物件函式
- JS判斷物件是否為空物件的方法JS物件
- 例項和物件物件
- 前端建構函式、原型、例項物件之間的關係前端函式原型物件
- JS中陣列與物件的遍歷方法例項JS陣列物件
- JS 建立例項物件的四種模式JS物件模式
- js建立XMLHttpRequest物件的程式碼例項JSXMLHTTP物件
- 波哥學JAVA,定義類 宣告屬性 建立物件 例項化物件 物件呼叫屬性或者方法Java物件