يمكن أن تقول لي الحرائق اسم جافا سكريبت لكائن؟

StackOverflow https://stackoverflow.com/questions/1800617

  •  05-07-2019
  •  | 
  •  

سؤال

ولقد تم إضافة قدرا كبيرا من جافا سكريبت لصفحاتي في الآونة الأخيرة، ولكنها تعلمت كل شيء في الكلاسيكية مقعد من بين السراويل الموضة. عندما أريد صفحتي أن تفعل شيئا، أنا جوجل والتجربة حتى أحصل على نتيجة أريد.

وأنا كثيرا ما يكون الكائنات في صفحاتي التي أريد أن تفعيل / تعطيل أو إخفائها أو إظهارها، وما إلى ذلك، ولكن - بعد أن غاب عن مقدمة صارم لجافا سكريبت - ليس لدي فكرة عن كيفية الحصول على هذه الأشياء مسمى. I انقر على الكائنات مع الحرائق المفتوحة، نتوقع أن نرى بعض اسم مؤهل بشكل كامل للكائن، ولكن الحصول على أي فرح. أنا فقط بحاجة إلى أن تكون قادرة على القيام بشيء ما مثل form.button.value = "شيء ما"، وتحتاج إلى معرفة اسم هذا الكائن.

وأي أفكار؟

وشكرا.

هل كانت مفيدة؟

المحلول

وبينما كنت تقوم بتشغيل كود جافا سكريبت، لديك كل المتغيرات المحلية في النطاق الحالي، لذلك إذا كان لديك التعليمة البرمجية التالية:

var myObject = New Object();
myObject.Person = New Object();
myObject.Person.Name = "Mark";
myObject.Person.Gender = "Male";
myObject.Name = "object1";

... الكائن الجذر الخاص سيكون myObject، ويمكنك الرجوع إلى نسل الكائنات من خلال تدوين نقطة.

ولكن، وذلك بفضل تنفيذ DOM في المتصفح، يمكنك أيضا يرث الكائن window عبر الكلمة this. في الواقع، يمكن أن أترك لكم الكلمة this خارج لحالات بسيطة أي عندما كنت لا تستخدم الإغلاق. لذلك، يمكنك الوصول إلى وظائف جافا سكريبت على أعلى مستوى فقط باستخدام اسم الدالة.

إذا كنت تريد الوصول إلى عناصر محددة، مثل هذا يبدو وكأنه كنت ترغب، تحتاج إلى معرفة DOM، وعدم استخدام بناء الجملة الذي تم يوحي (وهذا يبدو وكأنه 1990s جافا سكريبت). العنصر الجذر تحتاج إلى معرفته هو الكائن HTMLDocument، الوصول إليه عن طريق الملكية document. يمكنك اكتشاف العناصر مع Id محددة (لا Name) سمات باستخدام أسلوب getElementById العنصر ثيقة. بطبيعة الحال، فإنه يساعد إذا كنت قد أعطيت العنصر الخاص بك ورقم فريد من البداية. يمكنك أيضا بشكل متكرر استخدام مجموعة childNodes تكرار يدويا من خلال العناصر حتى تجد ما تريد. بدلا من ذلك، إذا كنت حقا لا يمكن توفير معرف، يمكنك أيضا استخدام الأسلوب getElementsByTagName، وهو يعلق على كل عنصر في DOM.

مثال:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
    <TITLE></TITLE>
    <META NAME="Generator" CONTENT="TextPad 4.6">
    <META NAME="Author" CONTENT="?">
    <META NAME="Keywords" CONTENT="?">
    <META NAME="Description" CONTENT="?">
    <SCRIPT LANGUAGE="Javascript">
        <!--

        function DoSummat()
        {
            var divInside = document.getElementById("Inside");
            divInside.textContent = "This text will appear inside.";
        }

        //-->
    </SCRIPT>
</HEAD>

<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#FF0000" VLINK="#800000" ALINK="#FF00FF" BACKGROUND="?">
<FORM>
    <INPUT TYPE="BUTTON" onclick="DoSummat();" NAME="MyButton" VALUE="Press Me">
</FORM>
<DIV ID="Outside">
    <DIV ID="Middle">
        <DIV ID="Inside"></DIV>
    </DIV>
</DIV>
</BODY>
</HTML>

نصائح أخرى

يتم تحديد

وعناصر عموما باستخدام السمة id. مثال:

<input type="submit" id="saveButton" value="Save" />

يمكنك استخدام الأسلوب getElementById للحصول على إشارة إلى عنصر:

var b = document.getElementById('saveButton');
b.value = 'Saving...';

وحسنا منذ ما قدمتموه المثال form.button.value="something"، انا التخمين كنت تريد التحكم كائنات HTML. يمكنك تعيين لهم الهوية، ومنها مثلا: <شكل معرف = "my_form" ... ومن ثم الحصول على عناصر من هوية من JS، كما يطلق على وظيفة حتى، getElementById ().

document.getElementById('my_form').button.value = 'something';

وأنت السؤال كنت غامض للغاية بحيث لا أستطيع أن أعطيك الجواب التي تحتاج إليها.

وObjects لا يمكن "تنشيط" / "المعطلة" وليس لديهم "أسماء" (أنها يمكن أن يكون لها خاصية name، إذا كان هذا هو ما تعنيه).

وعلى سبيل المثال، في ضوء:

var foo = {};

وfoo هو متغير ما يحدث في الحصول على قيمة كائن. الكائن غير متغير (كائن وجود "اسم"). معين:

bar = foo; foo = null;

وfoo الآن null ويتم تخزين الكائن الذي فو عقد الآن كما bar.

وأنت لن تكون قادرة على القيام بذلك. لا يرتبط اسم المتغير إلى المتغير، وانهم لم يجتز بين الوظائف. وأفضل ما يمكن القيام به هو كتابة دالة لاتخاذ سلسلة وحل إعادته إلى متغير:

function printVar(name) {
    console.log(name + ": " + window[name]);
}

وبطبيعة الحال، هناك <م> الكثير من الأمور على ما يرام مع هذا. أود أن أوصى مجرد جعل مكالمتين تسجيل:

console.log("foo");
console.log(foo);

وأو باستخدام بناء الجملة على غرار printf:

console.log("foo: %o", foo);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top